【问题标题】:Best practise to refreshing adapter data with custom view使用自定义视图刷新适配器数据的最佳实践
【发布时间】: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


【解决方案1】:

看看Why doesn't RecyclerView have onItemClickListener()? And how RecyclerView is different from Listview?。 OnClick Probelm 与您的问题非常相似。这篇文章对我帮助很大。

【讨论】:

  • 我认为这不能解决问题。问题是关于在CheckBox 更改时管理支持Adapter 的数据的最佳方法。
  • 是的,这正是我一直在寻找的答案。但这有点帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-07-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多