2017-06-02 103 views
-1

你能給我一些關於我的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

如果可能,我將不勝感激。

回答

1
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

好吧那我解決的第二個問題。謝謝你,先生! –

1

更改此

return super.getView(position, convertView, parent)

return convertView;

1

你必須在convertview爲空時爲它充氣。 (convertView == NULL){ convertView = LayoutInflater.from(getContext())。inflate(R.layout.list_item,parent); }

而且返回convertview而不是超級

0

我建議使用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; 
    } 
} 
相關問題