An article on the record list view and implement databinding data binding, now re-record a note data bindings that are, in fact, the two have many similarities, after all, it is equal to ten recycleview list view of a version upgrade but there are some differences
The Code
看这个文章之前建议先看上一篇文章 <list view + databinding 实现数据绑定>
Listview + Databinding data binding (a)
What do not understand, welcome to comment
1.创建实体类
View what data is needed, although the class is created entity
package com.primer.gaotest.mvp.control.messageDao;
import android.graphics.drawable.Drawable;
public class MessageDao {
private String name;
private String message;
private Drawable logo;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
public Drawable getLogo() {
return logo;
}
public void setLogo(Drawable logo) {
this.logo = logo;
}
public MessageDao(String name, String message, Drawable logo) {
this.name = name;
this.message = message;
this.logo = logo;
}
}
2.创建item布局
A description of each item view showing the effect of
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android">
<data>
<variable
name="message"
type="com.primer.gaotest.mvp.control.messageDao.MessageDao" />
</data>
<RelativeLayout
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="60dp">
<de.hdodenhof.circleimageview.CircleImageView
android:id="@+id/message_item_logo"
android:background="@{message.logo}"
android:layout_marginLeft="20dp"
android:layout_centerVertical="true"
android:layout_width="50dp"
android:layout_height="50dp"
android:src="@{message.logo}"/>
<!-- <ImageView
android:id="@+id/message_item_logo"
android:background="@{message.logo}"
android:layout_marginLeft="20dp"
android:layout_centerVertical="true"
android:layout_width="50dp"
android:layout_height="50dp">
</ImageView>-->
<TextView
android:textColor="@color/black"
android:textSize="16sp"
android:layout_marginTop="5dp"
android:layout_marginBottom="5dp"
android:id="@+id/message_item_name"
android:text="@{message.name??`没有数据`}"
android:layout_marginLeft="25dp"
android:layout_toRightOf="@+id/message_item_logo"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
</TextView>
<TextView
android:id="@+id/message_item_message"
android:textSize="13sp"
android:text="@{message.message??`没有数据`}"
android:layout_marginLeft="25dp"
android:layout_toRightOf="@id/message_item_logo"
android:layout_below="@id/message_item_name"
android:layout_centerVertical="true"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
</TextView>
</RelativeLayout>
</layout>
3.常见适配器Adapter
public class MessageRcycAdapter extends RecyclerView.Adapter<MessageRcycAdapter.ViewHolder> {
private List<MessageDao> data;
public MessageRcycAdapter(List<MessageDao> data) {
this.data = data;
}
/**
* 更新数据
* @param data
*/
public void updateData(ArrayList<MessageDao> data) {
this.data = data;
notifyDataSetChanged();
}
@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
LayoutInflater inflater = LayoutInflater.from(parent.getContext());
ViewDataBinding binding = DataBindingUtil.inflate(inflater, R.layout.message_rcyc_item, parent, false);
ViewHolder viewHolder = new ViewHolder(binding.getRoot());
viewHolder.setBinding(binding);
return viewHolder;
}
@Override
public void onBindViewHolder(ViewHolder holder, int position) {
holder.getBinding().setVariable(com.primer.gaotest.BR.message,data.get(position));
holder.getBinding().executePendingBindings();
}
@Override
public int getItemCount() {
return data == null ? 0 : data.size();
}
public static class ViewHolder extends RecyclerView.ViewHolder {
private ViewDataBinding binding;
private TextView message;
private TextView name;
private ImageView logo;
public ViewHolder(View itemView) {
super(itemView);
message = itemView.findViewById(R.id.message_item_message);
name = itemView.findViewById(R.id.message_item_name);
logo = itemView.findViewById(R.id.message_item_logo);
}
public ViewDataBinding getBinding() {
return binding;
}
public void setBinding(ViewDataBinding binding) {
this.binding = binding;
}
public TextView getMessage() {
return message;
}
public void setMessage(TextView message) {
this.message = message;
}
public TextView getName() {
return name;
}
public void setName(TextView name) {
this.name = name;
}
public ImageView getLogo() {
return logo;
}
public void setLogo(ImageView logo) {
this.logo = logo;
}
}
}
4.展示数据
public class MessageActivity extends AppCompatActivity {
private ActivityMessageBinding binding;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//setContentView(R.layout.activity_message);
binding = DataBindingUtil.setContentView(MessageActivity.this, R.layout.activity_message);
List<MessageDao> data = new ArrayList<MessageDao>();
data.add(new MessageDao("Primer","我的简历",getResources().getDrawable(R.drawable.about_head_test)));
data.add(new MessageDao("KG","我的简历",getResources().getDrawable(R.drawable.about_head_test)));
data.add(new MessageDao("Git","我的简历",getResources().getDrawable(R.drawable.about_head_test)));
data.add(new MessageDao("CPP","我的简历",getResources().getDrawable(R.drawable.about_head_test)));
data.add(new MessageDao("Java攻城狮","我的简历",getResources().getDrawable(R.drawable.about_head_test)));
binding.setVariable(com.primer.gaotest.BR.messageAdapter,new MessageRcycAdapter(data));
}
}
Sometimes easy to overlook the fact recycle view data can not be displayed
Remember to add and then recycle view layout management
app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager"
<androidx.recyclerview.widget.RecyclerView
app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager"
app:layout_constraintTop_toBottomOf="@id/employee_dynamics_title"
app:adapter="@{employeeDynamicAdapter}"
android:layout_width="match_parent"
android:layout_height="wrap_content"
tools:ignore="MissingConstraints">
</androidx.recyclerview.widget.RecyclerView>