【发布时间】:2015-12-02 15:19:21
【问题描述】:
我有以下自定义视图:
|--------------------|
| [ ] TextView |
|--------------------|
这只是一个简单的CheckBox 和一个TextView。此View 多次显示(一个月中的几天),通过列表 (RecylverView) 显示在屏幕上。
为此,我有一个Fragment,它将首先从数据库中读取数据,然后将这些数据放入列表中。
String[] data = getDataFromDB();
mRecycler.setAdapter(new MyAdapter(data));
假设每个其他项目都有一个选中的CheckBox。
所以我们有(例如有 4 个项目)这样的列表:
|--------------------|
| [ ] TextView |
|--------------------|
|--------------------|
| [X] TextView |
|--------------------|
|--------------------|
| [ ] TextView |
|--------------------|
|--------------------|
| [X] TextView |
|--------------------|
用户现在可以选中或取消选中CheckBox(嗯,它是一个复选框:))。在程序员方面,数据库中的 dataArray 也必须更新。因为,如果我不这样做并且用户滚动,则应该使用旧数据创建特定的列表项。是的,那是回收商的东西:)
无论如何。当用户选中/取消选中时,我需要更新数据。 这是我的问题:这样做的最佳做法是什么?
一个想法是在适配器中为每个View 设置一个Interface,以便在发生变化时得到通知。每个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
}
}
}
这两个想法都不是很好。使用自定义Views 刷新Adapter 数据的任何其他想法或模式?
注意:
这是一个非常基本的自定义View。我的应用实际上有多个Views(4 个Buttons 带有文本更改,1 个CheckBox 和一个EditText)但想法相同。
【问题讨论】:
-
你说这些想法不是很好。你能解释一下为什么吗?
标签: android listview checkbox android-recyclerview