我有以下自定义视图:
|--------------------|
| [ ] TextView |
|--------------------|
这只是一个简单的CheckBox
和一个TextView
。此View
会多次显示(每月的天数),并通过列表(RecylverView
)显示在屏幕上。
为此,我有一个Fragment
,它将首先从数据库中读取数据,然后将这些数据放入列表中。
String[] data = getDataFromDB();
mRecycler.setAdapter(new MyAdapter(data));
想象一下,其他所有项目都已选中CheckBox
。
所以我们(例如有4个项目)有这样一个列表:
|--------------------|
| [ ] TextView |
|--------------------|
|--------------------|
| [X] TextView |
|--------------------|
|--------------------|
| [ ] TextView |
|--------------------|
|--------------------|
| [X] TextView |
|--------------------|
用户现在可以选中或取消选中CheckBox
(好吧,它是一个复选框:))。在程序员方面,数据库中的dataArray也必须更新。因为,如果我不这样做并且用户滚动,则应使用旧数据创建特定列表项。是的,这是回收商的目的是:)
反正。当用户检查/取消选中我需要更新数据时。 这是我的问题:这样做的最佳做法是什么?
一个想法是在适配器中为每个Interface
设置View
,以便在出现更改时收到通知。每个CheckBox
都会成为一个监听器,当用户点击CheckBox
时会调用该监听器。监听器收到通知(来自适配器),它可以更新数据。
public class MyAdapter extends RecyclerView.Adapter<MyAdapter.MyViewHolder> {
@Override
public void onBindViewHolder(MyViewHolder myViewHolder, int position) {
myViewHolder.myView.setModel(data.get(position));
myViewHolder.myCheckBox.setOnCheckedChangeListener(new OnChanged) {
// TODO: Update data and refresh list/adapter
}
}
}
另一个想法是将列表和数据放在自定义View
中。
自定义View
实现CheckedChanceListener
并更新数据库并列出Adapter
。
public class TimeTrackingCardView extends CardView {
public void setListThings(String[] data, MyAdapter adapter) {
myCheckBox.setOnCheckedChangeListener(new OnChanged) {
// TODO: Update data and refresh list/adapter
}
}
}
这两种想法都不是很好。使用自定义Adapter
s?
View
数据的任何其他想法或模式
注意:
这是一个非常基本的自定义View
。我的应用实际上有多个Views
(4 Buttons
有文字更改,1 CheckBox
和EditText
),但想法相同。
答案 0 :(得分:0)
看看Why doesn't RecyclerView have onItemClickListener()? And how RecyclerView is different from Listview?。 OnClick Probelm与您的问题非常相似。这篇文章给了我很多帮助。