如何在适配器和视图持有者之间创建接口

时间:2016-09-09 09:44:53

标签: android interface android-adapter android-viewholder

我想在适配器和视图持有者之间创建一个接口(此视图持有者是另一个适配器的内部类),以便我可以更新文本视图(数字)。我怎么能这样做?

详细信息:

我有两个回收视图(主列表回收站视图和子列表回收站视图水平放置,如图所示),一个具有数字(作为其项目之一),另一个具有复选框(作为其项目)。

enter image description here

我有两个适配器FilterMainListAdapterFilterSubListAdapter,视图持有者FilterMainListViewHolderFilterSubListViewHolder填充字段。

如果在子列表回收站视图中选中了复选框,我希望主列表回收站视图中的相应编号能够更新。

为此,我正在使用和接口。

public interface ChangeFilterMainNumber {
void OnChangeFilterMainNumberListener(int totalCheckedNumber);
}

我在FilterSubListViewHolder内有复选框的onClick方法,我正在尝试发送总复选框检查号码,如下所示。

changeFilterMainNumber.OnChangeFilterMainNumberListener(totalCheckedNumber);

之后,我在ChangeFilterMainNumber

中实现了FilterMainListViewHolder接口
public class FilterMainListViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener,
ChangeFilterMainNumber {...}

但是如何在FilterSubListAdapter

中定义此界面
changeFilterMainNumber = ???;

[如果是活动,可以在changeFilterMainNumber = (ChangeFilterMainNumber) context的默认构造函数中定义类似FilterSubListAdapter的界面。但是视图持有者是另一个适配器的内部类呢?]

或者除了这个之外,还有更好的方法来找到我的问题的解决方案吗?

更新:您可以在此处查看代码https://github.com/gSrikar/FilterScreen

1 个答案:

答案 0 :(得分:0)

如果我按你的意愿实现这个功能,我会这样实现: (这就像观察者模式)

class Fragment/Activity implement OnChangeFilterMainNumberListener{
    FilterMainListAdapter mainAdapter;
    FilterSubListAdapter subAdapter;

    void oncreate() {
         mainAdapter = new FilterMainListAdapter(this);

    }

    @Override
    void OnChangeFilterMainNumberListener(int totalCheckedNumber) {
          .....
         // Update data to sub list
    }
}

class FilterMainListAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder>{

    public interface ChangeFilterMainNumber {
          void OnChangeFilterMainNumberListener(int totalCheckedNumber);
     }
    ChangeFilterMainNumber listener;
    FilterMainListAdapter(ChangeFilterMainNumber listener) {
         this.listener = listener;
    }

    @Override
    public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
        item.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    if(listener != null) {
                            listener.OnChangeFilterMainNumberListener(position)
                    }
                }
            });
    }

}

class FilterSubListAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder>{


}