我有一个活动,其中包含许多片段。在每个片段中我都有一个:
RecyclerView
按钮
我可以使用viewpager从片段移动到另一个片段。
我正在从服务器获取数据,并将它们传递到适配器,以填充recyclerview,如下所示:
adapter = new BrandsAdapter(getContext(), postArray,btValider,viewPager);
其中postArray是字符串列表。
BrandsAdapter.class:
public BrandsAdapter(Context context, ArrayList<Brand> filteredItems,Button btValider,ViewPager viewPager) {
this.context = context;
this.filteredItems = filteredItems;
this.btValider=btValider;
this.viewPager=viewPager;
}
onBindViewHolder
btValider.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
.....
// Get user selected brands and move to another fragment
viewPager.setCurrentItem(3);
}
});
我如何创建一个接口,可以在其中添加mybutton和viewpager实例,这样我就不会直接通过BrandsAdapter传递它们,因为从内存的角度来看,通过构造函数传递viewpager实例或其他视图会创建循环依赖关系,并且因此内存泄漏。
答案 0 :(得分:1)
1。创建一个接口
public interface BtValiderClickListener {
void btValiderClick(int positon);
}
将接口的实例传递给适配器,
adapter = new BrandsAdapter(getContext(), postArray,btValider,this);
在适配器中,
private BtValiderClickListener btValiderClickListener;
然后在您的适配器构造函数中
public BrandsAdapter(Context context, ArrayList<Brand> filteredItems,Button btValider,BtValiderClickListener btValiderClickListener) {
this.context = context;
this.filteredItems = filteredItems;
this.btValider=btValider;
this.btValiderClickListener=btValiderClickListener;
}
在onBindViewHolder中,
btValider.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
btValiderClickListener.btValiderClick(3)
}
});
覆盖实现接口的方法,
@Override
public void btValiderClick(int positon) {
viewPager.setCurrentItem(positon);
}