Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/maven/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 为recyclerview合并两个基本相似的适配器_Android_Android Recyclerview - Fatal编程技术网

Android 为recyclerview合并两个基本相似的适配器

Android 为recyclerview合并两个基本相似的适配器,android,android-recyclerview,Android,Android Recyclerview,我有两个适配器,它们根据不同的条件适应回收器视图。我想合并它们 问题是,我首先在使用它的活动的同一个文件中创建,另一个在新文件中 具体如下: DefaultAdapter位于使用它的文件中。 自动完成适配器也在同一文件中使用,但在其他文件中声明 我想摆脱默认适配器,将其功能放入AutoCompleteAdapter 这里有一些问题:我不能再使用parentfile的变量了 下面是我想要摆脱的适配器 public class DefaultAdapter extends RecyclerVi

我有两个适配器,它们根据不同的条件适应回收器视图。我想合并它们

问题是,我首先在使用它的活动的同一个文件中创建,另一个在新文件中

具体如下: DefaultAdapter位于使用它的文件中。 自动完成适配器也在同一文件中使用,但在其他文件中声明

我想摆脱默认适配器,将其功能放入AutoCompleteAdapter

这里有一些问题:我不能再使用parentfile的变量了

下面是我想要摆脱的适配器


  public class DefaultAdapter extends RecyclerView.Adapter<DefaultAdapter.ViewHolder> {

    private Context context;
    private AdapterView.OnItemClickListener onItemClickListener;
    List<String> searchList;

    @NonNull @Override
    public DefaultAdapter.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
      View view = (View) LayoutInflater.from(parent.getContext())
        .inflate(android.R.layout.simple_list_item_1, null);
      ViewHolder holder = new ViewHolder(view);
      return holder;
    }

    @Override public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
      holder.txt.setText(
        Html.fromHtml(getItem(position)).toString());///need to get rid of this error
    }

    @Override public int getItemCount() {
      return searchList.size();
    }

    @NonNull public String getItem(int position) {
      return searchList.get(position);
    }

    public class ViewHolder extends RecyclerView.ViewHolder {
      TextView txt;

      public ViewHolder(@NonNull View itemView) {
        super(itemView);
        txt = itemView.findViewById(android.R.id.text1);
        itemView.setOnClickListener(new View.OnClickListener() {
          @Override public void onClick(View v) {
            String title = txt.getText().toString();
            searchPresenter.saveSearch(title);
          }
        });
        itemView.setOnLongClickListener(new View.OnLongClickListener() {
          @Override public boolean onLongClick(View v) {
            String searched = txt.getText().toString();
            deleteSpecificSearchDialog(searched);
            return true;
          }
        });
      }
    }
  }

公共类DefaultAdapter扩展了RecyclerView.Adapter{
私人语境;
私有AdapterView.OnItemClickListener OnItemClickListener;
列表搜索列表;
@非空@覆盖
public DefaultAdapter.ViewHolder onCreateViewHolder(@NonNull ViewGroup父级,int-viewType){
视图=(视图)LayoutInflater.from(parent.getContext())
.充气(android.R.layout.simple_list_item_1,空);
ViewHolder=新的ViewHolder(视图);
报税表持有人;
}
@覆盖BindViewHolder上的公共无效(@NonNull ViewHolder,int位置){
holder.txt.setText(
Html.fromHtml(getItem(position)).toString());///需要消除此错误
}
@重写公共int getItemCount(){
返回searchList.size();
}
@非空公共字符串getItem(int位置){
返回searchList.get(位置);
}
公共类ViewHolder扩展了RecyclerView.ViewHolder{
文本视图;
公共视图持有者(@NonNull View itemView){
超级(项目视图);
txt=itemView.findviewbyd(android.R.id.text1);
itemView.setOnClickListener(新视图.OnClickListener(){
@覆盖公共void onClick(视图v){
字符串title=txt.getText().toString();
searchPresenter.saveSearch(标题);
}
});
itemView.setOnLongClickListener(新视图.OnLongClickListener(){
@仅长按一下即可替代公共布尔值(视图v){
搜索的字符串=txt.getText().toString();
deleteSpecificSearchDialog(已搜索);
返回true;
}
});
}
}
}
请注意SearchPresenter。这是父文件中的一个变量,导致了重大问题。自动完成适配器不必使用它,但默认情况下必须使用它

这是我希望它合并到的适配器

public class AutoCompleteAdapter extends RecyclerView.Adapter<AutoCompleteAdapter.ViewHolder>
  implements Filterable {

  @Inject JNIKiwix currentJNIReader;
  @Inject SharedPreferenceUtil sharedPreferenceUtil;
  @Inject ZimReaderContainer zimReaderContainer;
  private List<String> data;
  private KiwixFilter kiwifilter;
  private Context context;

  public AutoCompleteAdapter(Context context) {
    this.context = context;
    data = new ArrayList<>();
    kiwifilter = new KiwixFilter();
    setupDagger();
  }

  private void setupDagger() {
    CoreApp.getCoreComponent().inject(this);
  }

  @NonNull @Override public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
    View view = (View) LayoutInflater.from(parent.getContext())
      .inflate(android.R.layout.simple_list_item_1, null);
    ViewHolder holder = new ViewHolder(view);
    return holder;
  }

  @Override public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
    holder.title.setText(Html.fromHtml(getItem(position)).toString());
  }
  @Override
  public String getItem(int index) {
    String a = data.get(index);
    if (a.endsWith(".html")) {
      String trim = a.substring(2);
      trim = trim.substring(0, trim.length() - 5);
      return trim.replace("_", " ");
    } else {
      return a;
    }
  }

  @Override public int getItemCount() {
    return data.size();
  }

  public class ViewHolder extends RecyclerView.ViewHolder {
    TextView title;

    public ViewHolder(@NonNull View itemView) {
      super(itemView);
      title = itemView.findViewById(android.R.id.text1);
    }
  }
}
...
公共类自动完成适配器扩展了RecyclerView.Adapter
可过滤的{
@注入JNIKiwix currentJNIReader;
@注入SharedPreferenceUtil SharedPreferenceUtil;
@注入ZimReaderContainer ZimReaderContainer;
私人名单数据;
私人KiwixFilter kiwifilter;
私人语境;
公共自动完成适配器(上下文){
this.context=上下文;
数据=新的ArrayList();
kiwifilter=新的KiwixFilter();
匕首();
}
私人匕首{
CoreApp.getCoreComponent().inject(此);
}
@NonNull@Override public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent,int viewType){
视图=(视图)LayoutInflater.from(parent.getContext())
.充气(android.R.layout.simple_list_item_1,空);
ViewHolder=新的ViewHolder(视图);
报税表持有人;
}
@覆盖BindViewHolder上的公共无效(@NonNull ViewHolder,int位置){
holder.title.setText(Html.fromHtml(getItem(position)).toString());
}
@凌驾
公共字符串getItem(int索引){
字符串a=data.get(索引);
if(a.endsWith(“.html”)){
字符串修剪=a.子字符串(2);
trim=trim.substring(0,trim.length()-5);
回位阀内件。更换(““,”);
}否则{
返回a;
}
}
@重写公共int getItemCount(){
返回data.size();
}
公共类ViewHolder扩展了RecyclerView.ViewHolder{
文本视图标题;
公共视图持有者(@NonNull View itemView){
超级(项目视图);
title=itemView.findviewbyd(android.R.id.text1);
}
}
}
...
请注意两者之间的相似性,它们几乎相似,autocompleteadapter就像defaultadapter的超集

我只想去掉默认适配器

注意:我已经从AutoCompleteAdapter中删除了一些其他内容,我认为这些内容不是问题所必需的。 这里没有。。。
谢谢

您想要达到的目标我有一份清理代码的工作。如果观察,两个适配器可以合并。我想要的是去掉默认适配器。@kam1234,所以我想合并它们。但问题是两者都存储在不同的文件中:默认值在使用它的同一个文件中,而Auto则在新文件中。所以我不能在自动中使用默认值中使用的变量。@kam1234我希望我现在清楚了。@kam1234我已经编辑了这个问题。