JetPackのDataBindingの使用
Androidは数年前にJetpackコントロールを発売しました.その中にDataBindingがあります.このフレームワークはfindView ById()、setText()、setVisibility()、setEnabled()、setOnClickListener()などの方法を書く必要があります.コードの山を書くことを避けます.このフレームワークも使いやすいので、直接buildにあります.gradleでは、次のスクリプトを構成します.
まずbeanオブジェクトを定義し、xmlレイアウトにbeanのフルパスを導入します.例は次のとおりです.
xmlレイアウト、layoutをノードとし、データ型を導入
activity_live_da:
Activityのコードも簡単です
実行後、UIインタフェースにDeathとage:18の文字が表示され、Deathを表示するボタンをクリックすると、年齢のコントロールがage:38に変わります.
上は基本的な書き方で、liveDaBinding.setUser(bean); beanを設定してインタフェースをリフレッシュします.イベントをクリックしてsetuser(bean)を再呼び出したくない場合はどうしますか?BaseObservableという抽象クラスを使用して、UserBeanに継承させ、@Bindable注記でgetメソッドを修飾し、setメソッドでnotifyPropertyChanged()メソッドを呼び出すことができます.
notifyPropertyChanged(BR.age)のパラメータについて、getAge()メソッドに@Bindable注記を追加した後、コンパイルするとBRにageという属性が自動的に追加されます.
BaseObservableについては、基本データ型について、ObservableBoolean、ObservableByteなど、Stringやカスタムオブジェクトタイプを使用する場合は、上記xmlのConstraaintLayoutノードに新しいコントロールを追加するなど、ObservableFieldというクラスを使用できます.
UserBean:
Activityでのclickクリックイベント
クリックすると効果が見えます.クリックイベントの登録については、例えば上記xmlでandroid:onClick=「@{user.click}」と書き、UserBeanでclickメソッドを定義するなど、他のクラスに移動することもできます.
クリックすると、印刷ログが表示されます.
xmlのノードには複数のものがあります.データとクリックをUserBeanに置いてもいいし、分割してもいいです.例えば
ActivityではPresentもセットしておいて、
これでいいです.
android {
...
dataBinding {
enabled = true
}
...
}
まずbeanオブジェクトを定義し、xmlレイアウトにbeanのフルパスを導入します.例は次のとおりです.
public class UserBean {
public int age;
public String name;
public UserBean(int age, String name) {
this.age = age;
this.name = name;
}
public void setAge(int age) {
this.age = age;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public String getName() {
return name;
}
}
xmlレイアウト、layoutをノードとし、データ型を導入
activity_live_da:
Activityのコードも簡単です
public class LiveDaActivity extends BaseActivity {
ActivityLiveDaBinding liveDaBinding;
UserBean bean;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_live_da);
ViewDataBinding viewDataBinding = DataBindingUtil.setContentView(this, R.layout.activity_live_da);
liveDaBinding = (ActivityLiveDaBinding) viewDataBinding;
bean = new UserBean(18, " Death ");
bean.isAdult = true;
liveDaBinding.setUser(bean);
}
public void click(View view){
bean.setAge(38);
liveDaBinding.setUser(bean);
}
}
実行後、UIインタフェースにDeathとage:18の文字が表示され、Deathを表示するボタンをクリックすると、年齢のコントロールがage:38に変わります.
上は基本的な書き方で、liveDaBinding.setUser(bean); beanを設定してインタフェースをリフレッシュします.イベントをクリックしてsetuser(bean)を再呼び出したくない場合はどうしますか?BaseObservableという抽象クラスを使用して、UserBeanに継承させ、@Bindable注記でgetメソッドを修飾し、setメソッドでnotifyPropertyChanged()メソッドを呼び出すことができます.
public class UserBean extends BaseObservable {
public int age;
public String name;
public UserBean(int age, String name) {
this.age = age;
this.name = name;
}
public void setAge(int age) {
this.age = age;
notifyPropertyChanged(BR.age);
}
public void setName(String name) {
this.name = name;
}
@Bindable
public int getAge() {
return age;
}
public String getName() {
return name;
}
}
notifyPropertyChanged(BR.age)のパラメータについて、getAge()メソッドに@Bindable注記を追加した後、コンパイルするとBRにageという属性が自動的に追加されます.
BaseObservableについては、基本データ型について、ObservableBoolean、ObservableByteなど、Stringやカスタムオブジェクトタイプを使用する場合は、上記xmlのConstraaintLayoutノードに新しいコントロールを追加するなど、ObservableFieldというクラスを使用できます.
UserBean:
public class UserBean {
public int age;
public String name;
public final ObservableField lastName = new ObservableField<>();
public UserBean(int age, String name) {
this.age = age;
this.name = name;
}
public void setAge(int age) {
this.age = age;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public String getName() {
return name;
}
}
Activityでのclickクリックイベント
public void click(View view){
bean.lastName.set("abc");
}
クリックすると効果が見えます.クリックイベントの登録については、例えば上記xmlでandroid:onClick=「@{user.click}」と書き、UserBeanでclickメソッドを定義するなど、他のクラスに移動することもできます.
public void click(View view){
Log.e("UserBean", "UserBean click: " + view);
}
クリックすると、印刷ログが表示されます.
xmlのノードには複数のものがあります.データとクリックをUserBeanに置いてもいいし、分割してもいいです.例えば
ActivityではPresentもセットしておいて、
liveDaBinding.setPresent(new Present());
public class Present {
public void onClick(View view) {
switch (view.getId()) {
case R.id.userName:
...
break;
}
}
}
これでいいです.