Android Studio 之 DataBing ,不需要再一個個findViewById了


使用DataBinding,不需要再一個個findViewById了

1.在 build.gradel 中 添加下面語句
dataBinding{
enabled true
}


2.在 activity_main.xml 文件中 點小燈炮,自動生成 data 結點

3.在 MainActivity.java 中能得到一個新的類, ActivityMainBinding(此類取Activity名稱,這個類不是固定的) ActivityMainBinding binding

4.對 綁定的實例 進行綁定 binding = DataBindingUtil.setContentView(this,R.layout.activity_main);

5.然后在MainActivity.java 文件中,直接用 binding.控件名,進行訪問控件,不需要再像之前一樣,一個個定義控件變量了,也不需要一個個控件進行 findViewById() 了

6.之前的 setContentView(R.layout.activity_main); 這句方法也不需要寫了,直接屏蔽掉

7.在 activity_main.xml 文件中,對控件進行數據回綁
<data>
<variable
name="data"
type="com.example.databinding.MyViewModel" />
</data>
在 <data> 結點中聲明 數據變量,
在 textView 或 其他內容控件中,都可以使用 data 這個變量進行數據綁定
如:android:text="@{String.valueOf(data.number)}" 直接把 MyViewModel 中的 number 值綁定到控件上
android:onClick="@{()->data.add()}" 調用 MyViewModel 中的方法

 

1. ViewModel 類

package com.example.databinding;

import androidx.lifecycle.MutableLiveData;
import androidx.lifecycle.ViewModel;

public class MyViewModel extends ViewModel {
    private MutableLiveData<Integer> number;
    public MutableLiveData<Integer> getNumber(){
        if(number==null)
        {
            number = new MutableLiveData<>();
            number.setValue(0);
        }
        return number;
    }

    public void add(){
        number.setValue(number.getValue()+1);
    }
}

  

2.MainActivity 類

package com.example.databinding;

import android.os.Bundle;
import android.widget.Button;
import android.widget.TextView;

import androidx.appcompat.app.AppCompatActivity;
import androidx.databinding.DataBindingUtil;
import androidx.lifecycle.ViewModelProviders;

import com.example.databinding.databinding.ActivityMainBinding;


public class MainActivity extends AppCompatActivity {
    TextView textView;
    Button button;
    MyViewModel myViewModel;
    ActivityMainBinding binding;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        /*
        改造步驟:使用DataBinding
        1.在 build.gradel 中 添加下面語句
                  dataBinding{
                    enabled true
                }
        2.在 activity_main.xml 文件中 點小燈炮,自動生成 data 結點
        3.在 MainActivity.java 中能得到一個新的類, ActivityMainBinding(此類取Activity名稱,這個類不是固定的)  ActivityMainBinding binding
        4.對 綁定的實例 進行綁定 binding = DataBindingUtil.setContentView(this,R.layout.activity_main);
        5.然后在MainActivity.java 文件中,直接用 binding.控件名,進行訪問控件,不需要再像之前一樣,一個個定義控件變量了,
          也不需要一個個控件進行 findViewById() 了
        6.之前的 setContentView(R.layout.activity_main); 這句方法也不需要寫了,直接屏蔽掉
        7.在 activity_main.xml 文件中,對控件進行數據回綁
          <data>
                <variable
                    name="data"
                    type="com.example.databinding.MyViewModel" />
          </data>
          在 <data> 結點中聲明 數據變量,
          在 textView 或 其他內容控件中,都可以使用 data 這個變量進行數據綁定
          如:android:text="@{String.valueOf(data.number)}"     直接把 MyViewModel 中的 number 值綁定到控件上
              android:onClick="@{()->data.add()}"               調用   MyViewModel 中的方法
         */

        //setContentView(R.layout.activity_main);
        binding = DataBindingUtil.setContentView(this,R.layout.activity_main);
        /*
        textView = findViewById(R.id.textView);
        button   = findViewById(R.id.button); */

        myViewModel = ViewModelProviders.of(this).get(MyViewModel.class);
        binding.setData(myViewModel);     //監聽用它來替換了
        binding.setLifecycleOwner(this);  //這句不能少,否則數據不顯示
        /*
        myViewModel.getNumber().observe(this, new Observer<Integer>() {
                    @Override
                    public void onChanged(Integer integer) {
                        binding.textView.setText(String.valueOf(integer));
                    }
                });


        binding.button.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View view) {
                        myViewModel.add();
                    }
        });

         */


    }
}

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM