android - 如何从其他活动类调用自定义适配器类中存在的函数?
问题描述
这是我的 CustomAdapter 类,我有一个函数调用 setFilter
package Adapter;
public class CustomAdapter extends
RecyclerView.Adapter<CustomAdapter.ViewHolder> {
private Context c;
private List list;
public CustomAdapter(Context context, List itemlist) {
this.c= context;
this.list=itemlist;
}
@NonNull
@Override
public CustomAdapter.ViewHolder onCreateViewHolder(@NonNull ViewGroup
parent, int viewType) {
View view=LayoutInflater.from(parent.getContext()).
inflate(R.layout.custom_layout,parent,false
);
return new ViewHolder(view);
}
@Override
public void onBindViewHolder(@NonNull CustomAdapter.ViewHolder holder, int
position) {
Contact_Object listItem = (Contact_Object) list.get(position);
holder.text1.setText(listItem.getName());
holder.text2.setText(listItem.getNumber());
}
@Override
public int getItemCount() {
return list.size();
}
public class ViewHolder extends RecyclerView.ViewHolder implements
View.OnClickListener{
TextView text1,text2;
ViewHolder(View view) {
super(view);
view.setOnClickListener(this);
text1=view.findViewById(R.id.text1);
text2=view.findViewById(R.id.text2);
}
public void setFilter(List<Contact_Object> listItem){
list=new ArrayList<>();
list.addAll(listItem);
notifyDataSetChanged();
}
@Override
public void onClick(View v) {
int position=getAdapterPosition();
Contact_Object item= (Contact_Object) list.get(position);
Intent intent=new Intent(c, ContactDetails.class);
intent.putExtra("name",item.getName());
intent.putExtra("number",item.getNumber());
c.startActivity(intent);
}
}
}
这是 MainActivity 类,我想从中调用 setFilter 函数我在用户搜索时使用 searchView setOnQueryListener 我想将找到的列表显示为下拉列表
this is how I have setup my showContact function and adapter object of
CustomAdapter class
void showContacts() {
// Check the SDK version and whether the permission is already granted
or not.
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M &&
checkSelfPermission(Manifest.permission.READ_CONTACTS) !=
PackageManager.PERMISSION_GRANTED
&& checkSelfPermission(Manifest.permission.WRITE_CONTACTS) !=
PackageManager.PERMISSION_GRANTED) {
for (String permission : PERMISSIONS) {
if (ActivityCompat.checkSelfPermission(this, permission) !=
PackageManager.PERMISSION_GRANTED) {
requestPermissions(PERMISSIONS, PERMISSION_ALL);
return;
}
}
}
else
{// Android version is lesser than 6.0 or the permission is already
granted.
ArrayList<Contact_Object> contacts=getContactNames();
adapter=new CustomAdapter(this,contacts);
recyclerView.setAdapter(adapter);
}
}
searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
@Override
public boolean onQueryTextSubmit(String query) {
if (!searchView.isIconified()){
searchView.setIconified(true);
}
myMenuItem.collapseActionView();
return false;
}
@Override
public boolean onQueryTextChange(String newText) {
final List<Contact_Object> filtermodelist=filter(list,newText);
//here i am calling like adapter.setFilter(filterlist);
return false;
}
});
但 adapter.setFilter() 显示错误;请任何人帮助我:(
解决方案
你的方法
public void setFilter(List<Contact_Object> listItem){
list=new ArrayList<>();
list.addAll(listItem);
notifyDataSetChanged();
}
似乎在无法从类外部访问的 ViewHolder 类中将此 setFilter 方法移到 ViewHolder 类之外
推荐阅读
- c++ - 在c ++中删除对象是否也会删除对象中包含的指针引用的其他对象
- javascript - 无法使用 jquery 按钮提交表单
- javascript - 修复 vue 数据映射以按日期和员工分组
- maven - Gradle 7.1.1 找不到 jp.classmethod.aws:gradle-aws-plugin
- foreach - 如何在此状态下替换循环内的循环
- flutter - 如何根据用户的点击保持小部件扩展?
- node.js - Node、Express、Socket.io 无法连接到服务器
- python - 在 Python3.8 中通过串行(USB-RS232)端口发送 ASCII 命令时是否需要一些特殊编码?
- java - & 而不是 % 优化?
- python-3.x - 何时使用 peewee 使用 SQL 外键?