Android 使用View Binding來代替頻繁findViewById來得到view

從 Android Studio 3.6 開始,視圖綁定能夠通過生成綁定對象來替代 findViewById,從而可以幫您簡化代碼、移除 bug,並且從 findViewById 的模版代碼中解脫出來。

  • 在 build.gradle 中就可以方便快捷地開啓視圖綁定且無須額外引入依賴庫

  • 視圖綁定會爲 Module 中的每一個佈局文件生成一個綁定對象

    (activity_awesome.xml → ActivityAwesomeBinding.java,  activity_main.xml-->ActivityMainBinding.java)

  • 佈局文件中每一個帶有 id 的視圖都會在綁定對象中有一個對應的屬性,這個屬性將擁有正確的類型,並且空安全

  • 視圖綁定完美支持 Java 和 Kotlin 編程語言

代碼中如何使用。首頁android studio的開發版本要3.6.0以上

1.在module的build.gradle文件中。加上一句話。加在文件的android{}裏面就行

viewBinding {
    enabled = true
}
// 需要 Android Gradle Plugin 3.6.0android {    viewBinding {        enabled = true    }}

在 Android Studio 4.0 中,viewBinding 變成屬性被整合到了 buildFeatures 選項中,所以配置要改成:

// Android Studio 4.0android {    buildFeatures {        viewBinding = true    }}

2. 正常些xml佈局文件。要想獲取佈局文件的view。則每個view都要有id(android:id="@+id/btn")。 注意點。如果是include的view。也要起id,才能找到。

3. 在 Activity 中使用視圖綁定

private ActivityMainBinding mBinding;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        LayoutInflater inflater = getLayoutInflater();
        //由於次activity對應佈局文件是activity_main.xml所以會自動綁定ActivityMainBinding類調用inflate方法則可以得到此對象
        mBinding = ActivityMainBinding.inflate(inflater);
        setContentView(mBinding.getRoot());//每個對象都有一個getRoot方法,就是得到這個view

        mBinding.btn.setText("glide");//佈局文件中有個按鈕的id爲btn,直接調用.btn可以得到button對象。
        mBinding.btn.setOnClickListener(this);

    }

使用視圖綁定時,無須再調用 findViewById 方法,只要直接調用綁定對象中的對應屬性即可。

佈局的根視圖(無論有沒有 id)都會自動生成一個名爲 root 的屬性。在 Activity 的 onCreate 方法中,要將 root 傳入 setContentView 方法,從而讓 Activity 可以使用綁定對象中的佈局。

注意:

一個常見的錯誤用法是: 在開啓了視圖綁定的同時,依然在 setContentView(...)  中傳入佈局的 id 而不是綁定對象。這將造成同一佈局被填充兩次,同時監聽器也會被添加到錯誤的佈局對象中。

解決方案: 在 Activity 中使用視圖綁定時,一定要將綁定對象的 root 屬性傳入 setContentView() 方法中。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章