我的自定义阵列适配器中的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()方法。告诉适配器有多少项要膨胀也是非常重要的

+0

好吧那我解决的第二个问题。谢谢你,先生! –

更改此

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; 
    } 
}