绑定适配器负责发出相应的框架调用来设置值。例如,设置属性值就像调用 setText() 方法一样。再比如,设置事件监听器就像调用
setOnClickListener() 方法。数据绑定库允许您通过使用适配器指定为设置值而调用的方法、提供您自己的绑定逻辑,以及指定返回对象的类型。
首先我们看一下我们的item.xml
<?xml version="1.0" encoding="utf-8"?><layout xmlns:android="http://schemas.android.com/apk/res/android"> <data> <variable name="user" type="com.example.databinding_demo.UserInfoEntity" /> </data> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="vertical"> <TextView android:layout_width="match_parent" android:layout_height="wrap_content" android:text="@{user.name+user.gender}" android:textColor="@android:color/holo_blue_light" /> </LinearLayout></layout>
我们先是创建了一个UserInfoEntity的实体类。里面就两个属性,这里就不贴代码了。
然后我们可以看到我们这里使用的ListView
控件中的子布局。他绑定的就是我们的UserInfoEntity
然后里面的TextView
绑定的是我们的name 和 gender.
这里如果你有数据绑定的基础做起来还是非常的简单的。
然后我们看一下如何根据数据绑定创建一个BaseAdapter的适配器。
按照惯例先看看代码:
public class ItemAdapter extends BaseAdapter { List<UserInfoEntity> usersItem = new ArrayList<>(); private Context context; public ItemAdapter(List<UserInfoEntity> usersItem, Context context) { this.usersItem = usersItem; this.context = context; } @Override public int getCount() { return this.usersItem.size(); } @Override public Object getItem(int i) { return this.usersItem.get(i); } @Override public long getItemId(int i) { return i; } @Override public View getView(int i, View view, ViewGroup viewGroup) { ItemBinding dataBinding; if (view == null) { dataBinding = DataBindingUtil.inflate(LayoutInflater.from(this.context), R.layout.item, viewGroup, false); view = dataBinding.getRoot(); view.setTag(dataBinding); } else { dataBinding = (ItemBinding) view.getTag(); } dataBinding.setVariable(BR.user,usersItem.get(i)); return view; }}
这里可以看到就是getView
方法和普通的适配器不一样。
好~接着看一下如何使用吧:
首先我们实例化一个Binding。
然后将我们的Binding绑定到我们的View中去。但是在这个之前我们需要判断一个view是否为空 。
然后通过绑定Tag来实现。
最后我们需要通过设置dataBinding的变量来完成数据绑定。
现在我们的适配器完成了。然后看看如何使用我们的适配器吧。
显示看一下界面代码:
<?xml version="1.0" encoding="utf-8"?><layout xmlns:android="http://schemas.android.com/apk/res/android"> <androidx.constraintlayout.widget.ConstraintLayout android:layout_width="match_parent" android:layout_height="match_parent"> <ListView android:id="@+id/main_ListView" android:layout_width="match_parent" android:layout_height="match_parent" /> </androidx.constraintlayout.widget.ConstraintLayout></layout>
然后是我们的活动逻辑代码:
public class MainActivity extends AppCompatActivity {
private ActivityMainBinding binding;
@Overrideprotected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); binding = DataBindingUtil.setContentView(this, R.layout.activity_main); List<UserInfoEntity> usersList = new ArrayList<>(); int a = 30; for (int i = 0; i < a; i++) { usersList.add(new UserInfoEntity("Jia Hao", "Male")); } binding.mainListView.setAdapter(new ItemAdapter(usersList, MainActivity.this));}
}
首先需要实例化我们的活动数据绑定的dataBinding
然后初始化数据,最后使用binding进行数据绑定,在这个期间不需要使用任何的控件初始换,可以说是非常的方便。
这样我们的适配器就调用成功了。非常简单。