我的自定义数组适配器中的 getView 方法不起作用
My getView method in my custom array adapter is not working
你能给我一些关于我的 getView 方法的建议吗?
我有扩展 ArrayAdapter(context, id, list)
的自定义适配器
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 from my Task class// 可能会产生 NPE
如果可能,我将不胜感激。
改变这个
return super.getView(position, convertView, parent)
到
return convertView;
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 为 null 时,你必须膨胀。不是当它不为空时。然后 return 这个来自你的 getView() 方法
我也看不到 getCount() 方法。告诉适配器要充气多少个项目也很重要
当 convertview 为 null 时,您必须对其进行扩充。
if(convertView==null){
convertView = LayoutInflater.from(getContext()).inflate(R.layout.list_item, parent);
}
还有return convertview 而不是 super
我建议使用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;
}
}
你能给我一些关于我的 getView 方法的建议吗?
我有扩展 ArrayAdapter(context, id, list)
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 from my Task class// 可能会产生 NPE
如果可能,我将不胜感激。
改变这个
return super.getView(position, convertView, parent)
到
return convertView;
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 为 null 时,你必须膨胀。不是当它不为空时。然后 return 这个来自你的 getView() 方法
我也看不到 getCount() 方法。告诉适配器要充气多少个项目也很重要
当 convertview 为 null 时,您必须对其进行扩充。
if(convertView==null){ convertView = LayoutInflater.from(getContext()).inflate(R.layout.list_item, parent); }
还有return convertview 而不是 super
我建议使用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;
}
}