java - 如何使用接口类将 viewpager 实例传递给适配器
问题描述
我有一个包含许多片段的活动。在每个片段中,我都有一个:
回收站视图
按钮
我可以使用 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 实例或其他视图可以创建循环依赖关系,从而导致内存泄漏.
解决方案
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); }
推荐阅读
- html - 如何防止用户从 CSS 的下拉菜单中选择默认值?
- python - 无法在不保存数据库 Django 的情况下将临时数据添加到实例
- gsoap - gsoap calc++ 示例以错误告终
- c# - 验证配置文件 C# 的内容
- python - Python 多处理指南似乎有冲突:共享内存还是泡菜?
- bash - 预克隆/预初始化 git 挂钩?
- acumatica - 导入/复制的机会转移一行
- angular - ngxRestangular 中的解决方法 Angular url 参数错误
- html - 如何禁用 UL 样式?
- python-2.7 - Starteck KVM to USB crashcart 安装在 Ubuntu 18.04 python 问题上