首页 > 解决方案 > 如何在构造函数中传递 Recycler 视图适配器?

问题描述

假设我有三个这样的适配器,每个适配器都定义了一个接口,即 ClickListener,它有一个方法 onItemClick。

public class SearchResultAdapter extends RecyclerView.Adapter<SearchResultAdapter.searchResultViewHolder> 
{

....
public interface ClickListener {
    void onItemClick(int paramInt, View paramView);
}

}

如何将适配器传递给构造函数,以便我可以访问类内的 ClickListener() 方法适配器。

例子

public class ABC{

private RecyclerView.Adapter adapter;

public ABC(RecyclerView.Adapter adapter){
this.adapter = adapter;
}

private void xyz(){

//How to achieve this
recyclerView.setOnClickListener(new adapter.ClickListener(){

@Override
        public void onItemClick(int position, View v) {

        }
    });   

}

标签: javaandroidandroid-recyclerview

解决方案


好吧,在您的 Activity/Fragment 中,您有 RecyclerView 实例,在那里,您应该能够传递给ABCRecycler,以便它可以附加 onClick。

但是,我建议更好的设计是:您的活动/片段将您的适配器 OnClickListener 实现为:接收点击并将其传递给 ABC,然后 ABC 处理它。

喜欢:

public class SearchResultAdapter extends RecyclerView.Adapter<SearchResultAdapter.searchResultViewHolder> 
{

public void setListener(ClickListener listener){
    this.listener = listener;
}
public interface ClickListener {
    void onItemClick(int paramInt, View paramView);
}

}

public class ABC {
    public void adapterClicked(){
         // do something here on adapter item clicked.
    }
}

public class Activity extends AppCompatActivity {
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout....);

        SearchResultAdapter adapter = new ........();
        ABC abc = new ABC();

        adapter.setOnClickListener(() -> {
            abc.adapterClicked();
        }); // java 8
    }
}

推荐阅读