Android Data Binding 配合BaseAdapter
2017-12-05 15:14
204 查看
Android Data Binding 初探
Android Data Binding 进阶
Android Data Binding 配合BaseAdapter
Android 多多少少都会有 ListView,一般都写适配器 BaseAdapter,为了复用 Item 的 View,我们都会定义 ViewHolder 来保存 View。现在,我们用 Data Binding 来代替 ViewHolder。
还是例子演示。
子布局中定义了类型为com.johan.study.Person,名字为person的变量。
重点来了,我们看看 getView 方法,没有看到 ViewHolder 了,Item 所有 View 都在 ViewBinding 中,由于数据绑定,我们也不用挨个View取出来,然后设值。这么一看,代码是不是清晰了很多,而且一般 Item View 的逻辑不会很复杂,所以说 Data Binding 和 BaseAdapter 还是很般配的,有木有!!
我们再来看 Activity 怎么使用。
使用和平常是一样的。
Android Data Binding 进阶
Android Data Binding 配合BaseAdapter
Android 多多少少都会有 ListView,一般都写适配器 BaseAdapter,为了复用 Item 的 View,我们都会定义 ViewHolder 来保存 View。现在,我们用 Data Binding 来代替 ViewHolder。
还是例子演示。
定义主布局文件
<?xml version="1.0" encoding="utf-8"?> <layout xmlns:android="http://schemas.android.com/apk/res/android"> <LinearLayout xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" android:padding="10dp" tools:context="com.johan.study.MainActivity"> <ListView android:id="@+id/list_view" android:layout_width="match_parent" android:layout_height="match_parent" android:dividerHeight="1dp" android:divider="#aaaaaa" /> </LinearLayout> </layout>
定义Item的布局文件
<?xml version="1.0" encoding="utf-8"?> <layout xmlns:android="http://schemas.android.com/apk/res/android"> <data> <variable name="person" type="com.johan.study.Person" /> </data> <LinearLayout android:orientation="horizontal" android:layout_width="match_parent" android:layout_height="wrap_content" > <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:padding="10dp" android:textSize="16sp" android:text="@{person.name + person.age}" /> </LinearLayout> </layout>
子布局中定义了类型为com.johan.study.Person,名字为person的变量。
自定义BaseAdapter
public class MainAdapter extends BaseAdapter { private Context context; private List<Person> personList; public MainAdapter(Context context, List<Person> personList) { this.context = context; this.personList = personList; } @Override public int getCount() { return personList.size(); } @Override public Object getItem(int position) { return personList.get(position); } @Override public long getItemId(int position) { return position; } @Override public View getView(int position, View convertView, ViewGroup parent) { ItemMainBinding binding; if (convertView == null) { binding = DataBindingUtil.inflate(LayoutInflater.from(context), R.layout.item_main, parent, false); convertView = binding.getRoot(); convertView.setTag(binding); } else { binding = (ItemMainBinding) convertView.getTag(); } binding.setVariable(BR.person, personList.get(position)); return convertView; } }
重点来了,我们看看 getView 方法,没有看到 ViewHolder 了,Item 所有 View 都在 ViewBinding 中,由于数据绑定,我们也不用挨个View取出来,然后设值。这么一看,代码是不是清晰了很多,而且一般 Item View 的逻辑不会很复杂,所以说 Data Binding 和 BaseAdapter 还是很般配的,有木有!!
我们再来看 Activity 怎么使用。
Activity使用适配器
public class MainActivity extends AppCompatActivity { private ActivityMainBinding binding; private List<Person> personList = new ArrayList<>(); @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); binding = DataBindingUtil.setContentView(this, R.layout.activity_main); personList.add(new Person("Xiao1", 25)); personList.add(new Person("Xiao2", 24)); personList.add(new Person("Xiao3", 28)); personList.add(new Person("Xiao7", 21)); MainAdapter adapter = new MainAdapter(this, personList); binding.listView.setAdapter(adapter); } }
使用和平常是一样的。
相关文章推荐
- android列表框配合BaseAdapter实现列表
- android配合viewpager实现可滑动的标签栏示例分享
- android新特性:DrawerLayout与NavigationView配合使用
- Android-MVVM架构-Data Binding的使用
- 【从头学android】学习使用Gallery画廊和BaseAdapter
- Android教程(五)-- Button控件配合Toast控件的使用
- Android Data Binding(数据绑定)教程汇总
- Android Data Binding简单介绍
- Android ListView入门知识--各种Adapter配合使用
- Android Data Binding学习
- Android线程配合handler详解
- Android-MVVM架构-Data Binding的使用
- Android | setProp配合代码, 大大加快测试
- Android基础类之BaseAdapter
- Android游戏开发23:自定义ListView通用适配器(BaseAdapter)之全方位详解
- android总结整理----(3)自定义ListView(自定义BaseAdapter实现)
- android.graphics.Camera实现图像的旋转、缩放,配合Matrix...
- Android BaseAdapter
- android Data Binding 入门
- Android之自定义实现BaseAdapter(通用适配器二)