我的自定义阵列适配器中的getView方法不起作用
问题描述:
你能给我一些关于我的getView方法的建议吗?
我有一个扩展ArrayAdapter(背景下,ID列表)我的自定义阵列适配器中的getView方法不起作用
public class myCustomAdapter extends ArrayAdapter{
private List obj = null;
public myCustomAdapter(@NonNull Context context, @LayoutRes int resource, @NonNull List objects) {
super(context, resource, objects);
obj = objects;
}
@Override
public int getCount() {
return obj.size();
}
@Nullable
@Override
public Object getItem(int position) {
return super.getItem(position);
}
@NonNull
@Override
public View getView(int position, @Nullable View convertView, @NonNull ViewGroup parent) {
Task myTask = (Task) getItem(position);
if(convertView==null){
convertView = LayoutInflater.from(getContext()).inflate(R.layout.list_item, parent);
}
TextView myTextView = (TextView) convertView.findViewById(R.id.textView);
myTextView.setText(myTask.getTaskText());
CheckBox myCheckBox = (CheckBox) convertView.findViewById(R.id.checkBox);
myCheckBox.setChecked(myTask.getChecked());
return convertView;
}
}
问题1自定义适配器:超:未选中调用ArrayAdapter(..)为原料型
问题3的成员:getTaskText // methood从我的任务类//可能会产生NPE
如果可能,我将不胜感激。
答
if(convertView!=null){
convertView = LayoutInflater.from(getContext()).inflate(R.layout.list_item, parent);
}
应该
if(convertView==null){
convertView = LayoutInflater.from(getContext()).inflate(R.layout.list_item, parent);
}
ÿ当convertview为空时,你必须膨胀。不是当它不为空时。然后从你的getView()方法返回这个
另外我看不到getCount()方法。告诉适配器有多少项要膨胀也是非常重要的
答
更改此
return super.getView(position, convertView, parent)
到
return convertView;
答
你必须在convertview为空时为它充气。 (convertView == NULL){ convertView = LayoutInflater.from(getContext())。inflate(R.layout.list_item,parent); }
而且返回convertview而不是超级
答
我建议使用BaseAdapter,这是基本的,ArrayAdapter是BaseAdapter”的子类,在大多数情况下,你不需要继承BaseAdapter,直接使用它。
ArrayAdapter adapter = new ArrayAdapter(context, R.layout.list_item, R.id.text, stringList);
public class MyCustomAdapter extends BaseAdapter {
private List<Task> listData;
public MyCustomAdapter(List<Task> list) {
listData = list;
}
@Override
public int getCount() {
return listData.size();
}
@Override
public Object getItem(int position) {
return listData.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
if (convertView == null) {
convertView = LayoutInflater.from(parent.getContext()).inflate(R.layout.list_item, parent, false);
}
Task data = getItem(position);
TextView text = (TextView) convertView.findViewById(R.id.text);
return convertView;
}
}
好吧那我解决的第二个问题。谢谢你,先生! –