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