在片段中调用适配器方法

Calling an adapter method in a fragment

朋友们,我有一个带有搜索视图和回收视图的片段。我想在 recyclerview data.I 上实现该搜索视图当我尝试从我的适配器 class 在我的片段中调用方法时遇到问题它不允许它并要求我在适配器 class 是静态的,它不是 fine.Here 所需的片段代码 -

 private void processQuery(String query) {
        // in real app you'd have it instantiated just once
        ArrayList<String> result = new ArrayList<>();

        // case insensitive search
        for (String category : category_name) {
            if (category.toLowerCase().contains(query.toLowerCase())) {
                result.add(category);
            }
        }

        (MyCategoryAdaptercheckbox) MyAdapter.setCategorynames(result);
    }

我在这一行遇到错误-

(MyCategoryAdaptercheckbox) MyAdapter.setCategorynames(result);

这是我的 MyAdaper 声明和初始化 -

RecyclerView.Adapter MyAdapter;
 MyAdapter = new MyCategoryAdaptercheckbox(getMyCategoryAdapter1, getActivity().getApplicationContext(),category_name);

        recyclerView.setAdapter(MyAdapter);

这是我的适配器 class (setCategorynames) method.It 要求我将此方法设为静态 -

public  void setCategorynames(List<String> category_name) {
        this.category_name = category_name;
        notifyDataSetChanged();
    }

所以我想知道如何在片段中调用适配器 class 的方法? 我的适配器class代码-

public class MyCategoryAdaptercheckbox extends RecyclerView.Adapter<MyCategoryAdaptercheckbox.ViewHolder> {
    List<GetMyCategoryAdapter> getMyCategoryAdapter;
    Context context;
    List<String> category_name;
   GetMyCategoryAdapter getMyCategoryAdapter1;

    public MyCategoryAdaptercheckbox(List<GetMyCategoryAdapter> getMyCategoryAdapter, Context context, List<String> category_name) {
    this.getMyCategoryAdapter = getMyCategoryAdapter;
    this.context = context;
    this.category_name = category_name;
    }
    @Override
    public void onBindViewHolder(@NonNull ViewHolder viewHolder, int i) {
        if (viewHolder instanceof ViewHolder){
        }
        getMyCategoryAdapter1 =  getMyCategoryAdapter.get(i);
      ((ViewHolder) viewHolder).tv_categorytitle.setText(getMyCategoryAdapter1.getC_name());
        ((ViewHolder) viewHolder).tv_categoryid.setText(getMyCategoryAdapter1.getC_id());
        ((ViewHolder) viewHolder).gt= getMyCategoryAdapter1;
    }

    public void filterList(ArrayList<String> filterdNames) {
        this.category_name = filterdNames;
        notifyDataSetChanged();
    }
    }
}

我在您的代码中看到的一个问题是 setCategorynames(List<String> category_name) method is not resolved,因为 MyAdapter 未转换为 (MyCategoryAdaptercheckbox)

您需要更换

(MyCategoryAdaptercheckbox) MyAdapter.setCategorynames(result);

通过这个

((MyCategoryAdaptercheckbox) MyAdapter).setCategorynames(result);

首先创建一个这样的界面;

public interface ProcessQueryListener{
     void onSuccess(List<String> result);
}

在您的适配器中,您应该根据需要实现此侦听器。基本上是这样:

public MyCategoryAdaptercheckbox extends RecyclerView.Adapter implements ProcessQueryListener {
    @Override
    public void onSuccess(List<String> result){
         this.setCategorynames(result);
    }
}
.
.

在片段的 processQuery 函数中,您应该调用此 ProcessQueryListener。如;

ProcessQueryListener queryListener = (MyCategoryAdaptercheckbox) MyAdapter;

private void processQuery(String query) {
        // in real app you'd have it instantiated just once
        ArrayList<String> result = new ArrayList<>();

        // case insensitive search
        for (String category : category_name) {
            if (category.toLowerCase().contains(query.toLowerCase())) {
                result.add(category);
            }
        }

        if (queryListener != null) {
           queryListener.onSuccess(result);
        }
}