2013-05-28 30 views
2

我想用自己的元素填充ListViewLinkedList<String>我可以使用我自己班級的列表填充listview嗎?

我的類看起來是這樣的:

public class Foo { 
    public String text; 
} 

這是我的適配器列表:

String[] fromColumns = {"X"}; 
int[] toViews = {android.R.id.text1}; 
mAdapter = new SimpleCursorAdapter(this, 
     android.R.layout.simple_list_item_1, null, 
     fromColumns, toViews, 0); 
list = (ListView)findViewById(R.id.list); 
list.setAdapter(mAdapter); 

,我也有一個LinkedList<Foo> elements;,我想在我的列表中顯示

現在的問題是:如何解決這個問題?

  1. 我不知道該怎麼寫入fromColumns,以配合我text
  2. 我不知道如何我elements列表綁定到列表中,這樣它會顯示

回答

1

創建一個自定義適配器。您可以延長BaseAdapterArrayAdapterArrayAdapter是一個泛型類,因此它適用於此示例。

一種可能實現:

public class CustomAdapter extends ArrayAdapter<Item> { 

    public CustomAdapter(Context context, List<Item> items) { 
     super(context, 0, items); 
    } 

    public View getView(int position, View convertView, ViewGroup parent) { 
     ViewHolder holder; 
     if (convertView == null) { 
      convertView = View.inflate(getContext(), R.layout.some_layout, null); 
      holder = new ViewHolder(); 
      holder.textView = (TextView) convertView.findViewById(R.id.textView); 
      convertView.setTag(holder); 
     } else { 
      holder = (ViewHolder) convertView.getTag(); 
     } 
     holder.textView.setText(getItem(position).getText()); 
     return convertView; 
    } 

    private class ViewHolder { 
     TextView textView; 
    } 
} 

現在適配器設置是這樣的:

CustomAdapter customAdapter = new CustomAdapter(context, getList()); 
listView.setAdapter(customAdapter); 
+0

我編輯你的答案。 ArrayAdapter已經有一個列表和一個上下文,所以你可以(也應該)使用它們。此外,如果您在適配器中使用自定義列表而不是使用ArrayAdapter,則默認的「add」實現將不起作用。 另外,我用'View.inflate',所以你不必instanciate LayoutInflater和代碼更清晰 – razielsarafan

+0

@ santirivera92哦,你是對的。只是從一箇舊項目中複製粘貼一些代碼而沒有真正關注。謝謝。 – Ahmad

+0

非常感謝你! – gurehbgui

0

您需要創建對於自定義適配器..

,如:

public class AdapterCategoryList extends BaseAdapter { 
    private Context context; 
    private ArrayList<SetterCategoryNames> categoryNames; 
    public AdapterCategoryList(Context context, ArrayList<SetterCategoryNames> categoryNames){ 
     this.context = context; 
     this.categoryNames = categoryNames; 
    } 

    @Override 
    public int getCount() {  
     return categoryNames.size(); 
    } 

    @Override 
    public Object getItem(int position) {  
     return categoryNames.get(position); 
    } 

    @Override 
    public long getItemId(int position) {   
     return position; 
    } 

    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
     Holder holder; 
     if (convertView == null) { 
      convertView = View.inflate(context, R.layout.listitem_category_list, null); 
      holder = new Holder(); 
      holder.mTxtCategoryImage = (TextView) convertView.findViewById(R.id.txtCategoryListItem); 
      convertView.setTag(holder); 
     }else{ 
      holder = (Holder) convertView.getTag(); 
     }   
     holder.mTxtCategoryImage.setBackgroundResource(categoryNames.get(position).getCategoryImage());   
     return convertView; 
    } 

    class Holder { 
     TextView mTxtCategoryImage; 
    } 

} 
相關問題