android - 为 recyclerview 合并两个最相似的适配器
问题描述
我有两个适配器可以根据不同的条件适应回收站视图。我想合并它们。
问题是我首先在与正在使用它的活动相同的文件中创建,另一个在新文件中。
采取如下方式: DefaultAdapter 在使用它的文件中。AutoCompleteAdapter 也在同一个文件中使用,但在其他文件中声明。
我想摆脱默认适配器并将其功能放入 AutoCompleteAdapter。
它有一些问题:我不能再使用 ParentFiles 的变量。
下面是我想摆脱的适配器。
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;
}
});
}
}
}
请注意 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);
}
}
}
...
注意两者之间的相似性,它们几乎相似,autocompleteadapter 就像 defaultadapter 的超集。
我只想摆脱默认适配器。
注意:我已经从 autocompleteaadapter 中删除了一些其他的东西,我认为它们不是问题所必需的。菜鸟在这里...谢谢
解决方案
推荐阅读
- excel - 强制宏在特定时间 VBA 后停止
- ios - 即使使用正确的标识符,视图控制器也不会通过 instanceViewController 函数加载
- python - Python regex re.sub 根据需要替换
- python - 尽管我输入了有效的输入(LPL,BOH),但这个 while 循环似乎保持活动状态。我似乎找不到问题
- ubuntu - 在 Ubuntu 虚拟机上构建 Drake
- reactjs - react-stripe-elements 样式化卡片元素
- events - kivy_garden.contextmenu:如何防止其触摸事件到达其他小部件?
- python - Python BeautifulSoup标签内缺少信息如何在标签内包含信息
- javascript - 错误无法读取未定义的属性“toLowerCase”
- javascript - 找不到模块:使用 React Router 时无法解析“./serviceWorker”