使用自定义视图刷新适配器数据的最佳做法

时间:2015-09-07 06:30:35

标签: android listview checkbox android-recyclerview

我有以下自定义视图: |--------------------| | [ ] 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 CheckBoxEditText),但想法相同。

1 个答案:

答案 0 :(得分:0)

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