android - 未触发自定义 BaseAdapter 的 getView() 方法
问题描述
我正在为数组列表设置一个自定义基本适配器但是我的适配器的 getView() 方法没有被调用。我尝试了许多解决方案,但没有一个对我有用。我从 Aynctask 的 postExecute 调用 setAdapter() 函数
@Override
protected void onPostExecute(ArrayList<Object> objects) {
MyListAdapter myAdapter = new MyListAdapter(MySearchList.this,objects);
ListView lv = findViewById(R.id.MyList);
lv.setAdapter(myAdapter);
Log.d("done", "onPostExecute: Done");
}
我的自定义适配器类是
public class MyListAdapter extends BaseAdapter {
private final ArrayList<Object> myList;
private final Activity context;
private LayoutInflater inflater;
public MyListAdapter(Activity context , ArrayList<Object> myList) {
this.myList = myList;
inflater = LayoutInflater.from(context);
this.context = context;
Log.d("constructor", String.valueOf(myList.size()));
}
@Override
public int getCount() {
Log.d("", "getCount: ");
return myList.size();
}
@Override
public Object getItem(int position) {
return myList.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@NonNull
@Override
public View getView(int position, @Nullable View convertView, @NonNull ViewGroup parent) {
View rowView;
Log.e("adapting", myList.get(position).toString() );
if (myList.get(position) instanceof wordDefination){
Log.e("adapting", myList.get(position).toString() );
rowView = inflater.inflate(R.layout.word_meaning_single,null,true);
}
else{
rowView = inflater.inflate(R.layout.word_meaning_single,null,true);
}
return rowView;
}
@Override
public int getViewTypeCount() {
return 2;
}
适配器的构造函数正在调用,但 getView() 方法不是
更新:我也尝试使用 ArrayAdapter 而不是 BaseAdapter 但不工作
public class MyListAdapter extends ArrayAdapter<Object> {
private final ArrayList<Object> myList;
private final Activity context;
private LayoutInflater inflater;
public MyListAdapter(Activity context , ArrayList<Object> myList) {
super(context,R.layout.word_meaning_single,myList);
this.myList = myList;
inflater = LayoutInflater.from(context);
this.context = context;
Log.d("constructor", String.valueOf(myList.size()));
}
@NonNull
@Override
public View getView(int position, @Nullable View convertView, @NonNull ViewGroup parent) {
View rowView;
Log.e("adapting", myList.get(position).toString() );
if (myList.get(position) instanceof wordDefination){
Log.e("adapting", myList.get(position).toString() );
rowView = inflater.inflate(R.layout.word_meaning_single,null,true);
}
else{
rowView = inflater.inflate(R.layout.word_meaning_single,null,true);
}
return rowView;
}
}
解决方案
更新 getView() 中的 if 条件并删除 else 并扩展 BaseAdapter
public class MyListAdapter extends BaseAdapter {
private final ArrayList<Object> myList;
private final Activity context;
public MyListAdapter(Activity context , ArrayList<Object> myList) {
this.myList = myList;
this.context = context;
Log.d("===constructor", String.valueOf(myList.size()));
}
@Override
public int getCount() {
Log.d("===", "getCount: "+myList.size());
return myList.size();
}
@Override
public Object getItem(int position) {
return myList.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@NonNull
@Override
public View getView(int position, @Nullable View convertView, @NonNull ViewGroup parent) {
View rowView=convertView;
Log.d("===adapting", myList.get(position).toString() );
if (convertView == null) {
LayoutInflater inflater = ((Activity) context).getLayoutInflater();
rowView = inflater.inflate(R.layout.word_meaning_single,parent,false);
Log.d("adapting", myList.get(position).toString() );
}
return rowView;
}
推荐阅读
- python - 比较第一列中两个数据框中的相同条目,并将差异移动/添加到下一列
- javascript - NullInjectorError: StaticInjectorError(AppModule)[TranslateService -> TranslateStore]
- c - “pi+1”语句如何在使用 Lomuto 算法进行分区的快速排序函数中消除尾调用?
- javascript - 我在我的不和谐机器人上不断收到此错误:“HTTPError [AbortError]:用户中止了请求。”
- applescript - Applescript - 更快地输入字符串
- awk - AWK 在一列中用它的一部分替换一个大字符串(切掉它的一部分),并完整地打印所有其他列,保持格式
- reactjs - ReactJS 局部类变量在 ComponentUpdate 上被清除
- java - 通过 Spring Boot 加载要映射的属性文件
- c - 为什么我的巴比伦算法 2 不适用于 n=65?
- openssl - OpenSSL - 我在生成 CRL 时出错(创建序列号索引时出错:(2,7,9))