根据特定于视图类型的单击事件刷新RecyclerView

时间:2018-07-18 12:00:26

标签: android android-studio android-recyclerview recycler-adapter

我正在使用具有2种视图类型的RecyclerView。我想分别处理单个类型的点击事件。我可以在适配器的onBindViewHolder方法中执行此操作。但是我的一种视图类型必须重新渲染活动,因为它会更改RecyclerView数据。

基本上,这是一个文件浏览器应用程序,一种视图类型用于“文件”,另一种视图类型用于“文件夹”。如果用户点击“文件夹”,我想用“文件夹路径”重新渲染RecyclerView。

我研究了这个问题,但是我感到迷失于RecyclerView的不同onItemClickListener实现和从适配器调用Activity方法的过程中,我觉得这很混乱。

ListView似乎凭借其简单的onItemClickListener方法适合我的情况,但并未作为RecyclerView进行优化。

最干净的方法是什么?

1 个答案:

答案 0 :(得分:0)

我会给你一个例子,看起来像这样:

//The interface the activity implements
    public interface DirectoryClickListener {
        void onClick(Directory directory)
    }

//The Activity
    public class DirectoryActivity extends AppCompatActivity implements DirectoryClickListener {
       @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            adapter = new DirectoryAdapter(this);
        }

        @Override
        public void onClick(Directory directory) {
        //yourcode
        }
    }

//The adapter constructor
    public DirectoryAdapter(DirectoryClickListener listener) {
        this.listener = listener;
    }

//OnBindViewHolder you call the onClick to send the directory to the activity where from there you get the files list and refresh the adapter data
    @Override
    public void onBindViewHolder(ViewHolder viewHolder, int position) {
        viewHolder.itemView.setOnClickListener(view -> {
            listener.onClick(getItem(position));
        });
    }