Android ViewStubの基本使用

2724 ワード

レイアウトを書くときに、必要なときに表示されるコントロールやサブレイアウトがあります.必要でないときに消えるコントロールもあります(ここでの消失は見えず、位置を占めません).レイアウトに直接描画し、条件に応じてsetVisibility(VISIBLE、INVISIBLE、GONE)を設定するのが便利ですが、コントロールやサブレイアウトが親レイアウトの初期化時にレンダリングされ、パフォーマンスが消費されるのが欠点です.もう1つは、同じ機能を実現できるViewStubを使用しますが、inflateメソッドまたはsetVisibility(int)メソッドを呼び出す場合にのみレンダリングされ、リソースの消費量を低減します.
"@+id/stub"
         //       id
         android:inflatedId="@+id/subTree"
         //     Id
         android:layout="@layout/mySubTree"
         android:layout_width="120dip"
         android:layout_height="40dip" />
//   Java  
ViewStub stub = (ViewStub) findViewById(R.id.stub);
View inflated = stub.inflate();
当社はプロジェクトで多くのDataBingingを使用しているので、DataBindingの使用方法をわざわざ研究しました.inflate後layoutのviewDataBindingを入手するには、次の2つの方法があります.
if (!binding.viewStubRedispatch.isInflated()) {
                binding.viewStubRedispatch.getViewStub().inflate();
                //1
                 binding.viewStubRedispatch.setOnInflateListener(new ViewStub.OnInflateListener() {
                     @Override
                     public void onInflate(ViewStub stub, View inflated) {
                         ((LayoutBtnRedispatchRepairBinding) DataBindingUtil.bind(inflated)).setOnRedispatchClick(new OnClickHandler());
                     }
                 });
                 //2
                ((LayoutBtnRedispatchRepairBinding) binding.viewStubRedispatch.getBinding()).setOnRedispatchClick(new OnClickHandler() {
                    @Override
                    public void onClick() {
                        super.onClick();
                        if (maintainTaskDetailClickListener != null) {
                            maintainTaskDetailClickListener.onRedispatch();
                        }
                    }
                });
            }
viewDataBinding.viewStubIdが入手したのは、ViewStubProxyタイプのインスタンスです.ViewStubProxyはDataBindingパッケージで、主にViewStubのDatabindingの使用に役立ちます.getViewStub()メソッドでViewStubインスタンスを取得できます.getBindingでinflate()の後のlayoutのViewDataBindingがもらえます.
転載先:https://juejin.im/post/5c6ab2f1f265da2d9e17497f