今天会使用databinding的方式去实作一个Recyclerview。
public class DBData {
public final ObservableField<String> name=new ObservableField<>();
public final ObservableField<String> sex=new ObservableField<>();
public final ObservableField<Integer> age=new ObservableField<>();
}
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android">
<data>
<variable
name="data"
type="com.example.newtest.datadindRecyclerviewTest.DBData" />
</data>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/UserName"
android:textSize="30sp"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@{data.name}"
android:textSize="30sp"/>
</LinearLayout>
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/UserSex"
android:textSize="30sp"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@{data.sex}"
android:textSize="30sp"/>
</LinearLayout>
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/UserAge"
android:textSize="30sp"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@{String.valueOf(data.age)}"
android:textSize="30sp"/>
</LinearLayout>
<View
android:layout_width="match_parent"
android:layout_height="2dp"
android:background="@color/colorPrimary"/>
</LinearLayout>
</layout>
这里会发现在data.age
加了一个String.valueOf()
,data.age
是int,如果不加String.valueOf()
会报错。
public class BindRecyclerViewAdapter extends RecyclerView.Adapter<BindRecyclerViewAdapter.ViewHolder> {
AppCompatActivity activity;
List<DBData> dBDataList;
public BindRecyclerViewAdapter(AppCompatActivity activity,List<DBData> dBDataList){
this.activity=activity;
this.dBDataList=dBDataList;
}
@Override
public ViewHolder onCreateViewHolder( ViewGroup parent, int viewType) {
LayoutInflater inflater=LayoutInflater.from(activity);
ItemDataListBinding binding=ItemDataListBinding.inflate(inflater,parent,false);
return new ViewHolder(binding);
}
@Override
public void onBindViewHolder( ViewHolder holder, int position) {
DBData dbData =dBDataList.get(position);
holder.bind(dbData);
}
@Override
public int getItemCount() {
return dBDataList.size();
}
public class ViewHolder extends RecyclerView.ViewHolder {
ItemDataListBinding itemDataListBinding;
public ViewHolder(ItemDataListBinding binding) {
super(binding.getRoot());
itemDataListBinding=binding;
}
void bind(DBData dbData){
itemDataListBinding.setData(dbData);
itemDataListBinding.executePendingBindings();
}
}
}
将ViewHolder的参数从view改成ItemDataListBinding,onBindViewHolder
将原本用setText的方式显示UI改成bind(dbData)
,而在bind(dbData)
记得要加executePendingBindings()
,executePendingBindings()
会立即更新UI。
设定要传入的资料
private void init() {
recyclerView=findViewById(R.id.recyclerview1);
for (int i=1;i<11;i++){
DBData dBdata=new DBData();
dBdata.name.set("eles"+i);
dBdata.sex.set("boy");
dBdata.age.set(i+15);
dBDataList.add(dBdata);
}
bindRecyclerViewAdapter =new BindRecyclerViewAdapter(this,dBDataList);
recyclerView.setLayoutManager(new LinearLayoutManager(this));
recyclerView.setAdapter(bindRecyclerViewAdapter);
}
MainActivity完整程序码
public class MainActivity3 extends AppCompatActivity {
BindRecyclerViewAdapter bindRecyclerViewAdapter;
RecyclerView recyclerView;
ArrayList<DBData> dBDataList=new ArrayList<>();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main3);
init();
}
private void init() {
recyclerView=findViewById(R.id.recyclerview1);
for (int i=1;i<11;i++){
DBData dBdata=new DBData();
dBdata.name.set("eles"+i);
dBdata.sex.set("boy");
dBdata.age.set(i+15);
dBDataList.add(dBdata);
}
bindRecyclerViewAdapter =new BindRecyclerViewAdapter(this,dBDataList);
recyclerView.setLayoutManager(new LinearLayoutManager(this));
recyclerView.setAdapter(bindRecyclerViewAdapter);
}
}
>>: Day-16 Pytorch 的 Training 流程
前情提要 艾草:「昨天教你原理,今天我们实际来实作这个术式吧!」 「好~~」 艾草:「来!发动前要念...
09-10-2021 Mounting 当组件被初始化,第一次被放入DOM时。 ComponentD...
今年的疫情蛮严重的,希望大家都过得安好,希望疫情快点过去,能回到一些线下技术聚会的时光~ 今天目标:...
1.前言 今天就不废话拉,直接进入主题(大家应该都去报复性出游了吧)。 2.html 其实HTML目...
前情提要 昨天使用了 Dcard 的 API 来爬取 Dcard 上面的文章。 开始之前 各位开始在...