ViewBinding の使用法

ViewBinding の使用法

ViewBinding は、findViewById() を置き換えてビューをバインドできる新しいライブラリです。これは、ビュー階層内のビューにアクセスするタイプ セーフで null 許容の方法です。ButterKnife などの他のバインディング ライブラリと比較して、ViewBinding は Google によって公式に提供されており、使い方が簡単です。

ViewBinding を使用する手順は次のとおりです。

  1. build.gradle ファイルに次の依存関係を追加します。
android {
    
    
    ...
    buildFeatures {
    
    
        viewBinding true
    }
}

dependencies {
    
    
    ...
    implementation 'com.android.support:viewbinding:28.0.0-alpha1'
}
  1. レイアウト ファイルにタグを追加します。例:
<layout xmlns:android="http://schemas.android.com/apk/res/android">
    <LinearLayout
        android:id="@+id/container"
        android:layout_width="match_parent"
        android:layout_height="match_parent">

        <TextView
            android:id="@+id/text_view"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Hello World!" />

    </LinearLayout>
</layout>
  1. ViewBinding を使用して、コード内でビューをバインドします。次に例を示します。
class MainActivity : AppCompatActivity() {
    
    

    private lateinit var binding: ActivityMainBinding

    override fun onCreate(savedInstanceState: Bundle?) {
    
    
        super.onCreate(savedInstanceState)

        binding = ActivityMainBinding.inflate(layoutInflater)
        setContentView(binding.root)

        binding.container.setOnClickListener {
    
    
            binding.textView.text = "You clicked me!"
        }
    }
}

この例では、ActivityMainBinding を使用して activity_main.xml 内のビューをバインドします。inflate() メソッドを使用してバインディング オブジェクトを作成し、setContentView() メソッドを使用してルート ビューを設定します。その後は、通常のレイアウトと同じようにビューにアクセスできます。

ViewBinding を使用する主な利点は、多くの定型コードを回避できることと、Kotlin の null 許容型を使用するため実行時の NullPointerExceptions を回避できることです。

アクティビティで ViewBinding を使用する

Activity で ViewBinding を使用するには、build.gradle ファイルに次の依存関係を追加する必要があります。

android {
  ...
  buildFeatures {
    viewBinding true
  }
  ...
}

dependencies {
  ...
  implementation 'com.android.support:viewbinding:28.0.0'
}

次に、次のコードをアクティビティのレイアウト ファイルに追加します。

<LinearLayout
    ...
    >

    <TextView
        android:id="@+id/textView"
        ...
        />

    <Button
        android:id="@+id/button"
        ...
        />

</LinearLayout>

Activity で ViewBinding を使用する場合は、まず、Activity で ViewBinding オブジェクトを宣言し、onCreate() メソッドで初期化する必要があります。

private ActivityMainBinding binding;

@Override
protected void onCreate(Bundle savedInstanceState) {
    
    
    super.onCreate(savedInstanceState);
    binding = ActivityMainBinding.inflate(getLayoutInflater());
    setContentView(binding.getRoot());
}

次に、バインディング オブジェクトを使用して、レイアウト内のコントロールを操作できます。

binding.textView.setText("Hello World!");
binding.button.setOnClickListener(new View.OnClickListener() {
    
    
    @Override
    public void onClick(View v) {
    
    
        // do something
    }
});

findViewById(R.id.text_view)ViewBinding は、レイアウト ファイル内のコントロールの ID に基づいて、これらのコントロールに対応する変数名を生成するため、使用する場合は、対応する ViewBinding 変数名など、キャメルケースの命名方法を使用する必要があることに注意してくださいbinding.textView

さらに、アクティビティに複数のレイアウト ファイルがある場合は、対応する ViewBinding オブジェクトを使用して、別のレイアウト ファイルのコントロールを操作する必要があることに注意してください。次に例を示します。

private ActivityMainBinding mainBinding;
private ActivityOtherBinding otherBinding;

@Override
protected void onCreate(Bundle savedInstanceState) {
    
    
    super.onCreate(savedInstanceState);
    mainBinding = ActivityMainBinding.inflate(getLayoutInflater());
    otherBinding = ActivityOtherBinding.inflate(getLayoutInflater());
    setContentView(mainBinding.getRoot()); // 设置默认布局
}

private void switchLayout(boolean isMain) {
    
    
    if (isMain) {
    
    
        setContentView(mainBinding.getRoot());
    } else {
    
    
        setContentView(otherBinding.getRoot());
    }
}

フラグメントで ViewBinding を使用する

Fragment で ViewBinding を使用するには、Fragment の onCreateView メソッドで次の手順を実行する必要があります。

  1. 次のように、Fragment クラスで ViewBinding オブジェクトを定義します。
private var binding: FragmentExampleBinding? = null
  1. onCreateView メソッドで ViewBinding オブジェクトを取得します。
binding = FragmentExampleBinding.inflate(inflater, container, false)
  1. ViewBinding のルート ビューを返します。
return binding?.root
  1. フラグメントが破棄されたら必ずバインドを解除してください。
override fun onDestroyView() {
    
    
   super.onDestroyView()
   binding = null
}

完全なサンプルコード:

class ExampleFragment : Fragment() {
    
    
   private var binding: FragmentExampleBinding? = null
   
   override fun onCreateView(
      inflater: LayoutInflater,
      container: ViewGroup?,
      savedInstanceState: Bundle?
   ): View? {
    
    
      binding = FragmentExampleBinding.inflate(inflater, container, false)
      
      return binding?.root
   }
   
   override fun onDestroyView() {
    
    
      super.onDestroyView()
      binding = null
   }
}

おすすめ

転載: blog.csdn.net/weixin_74239923/article/details/134805326