2008-11-13 71 views
20

我正在使用ListView來顯示我的應用程序的主屏幕。
主屏幕本質上是一個menu進入應用程序的不同部分。目前,我有ListView其內容以編程方式在onCreate方法中添加。如何在Android的ListView中爲菜單項創建圖標?

這裏是代碼片段,這是否:

String[] mainItems = { 
    "Inbox", "Projects", "Contexts", "Next Actions" 
} 

@Override 
public void onCreate(Bundle icicle) { 
    super.onCreate(icicle); 
    setContentView(R.layout.main); 

    setListAdapter(new ArrayAdapter<String>(
      this, android.R.layout.simple_list_item_1, mainItems)); 
    registerForContextMenu(getListView()); 
} 

所以菜單基本上是隻是一羣與包含在mainItems陣列中的文本節點。我知道我可以創建一個具有ImageView和TextView的XML佈局(即R.layout.mainMenu_item),但我不確定如何設置ImageView的圖標。我已經看到有一個setImageResouce(int resId)方法,但使用ArrayAdapter生成時使用此方法的方式正在逃避我。有一個更好的方法嗎?

回答

15

我通常爲ListView做的事是通過擴展方便的BaseAdapter類來實現我自己的Adapter。你要實現的抽象方法之一就是前面提到的海報getView()。從那裏你可以膨脹一個包含ImageView的佈局,使用findViewById獲取對它的引用,並將圖像設置爲你添加到資源中的任何drawable。

public View getView(int position, View convertView, ViewGroup parent) { 

    View row = inflater.inflate(R.layout.menu_row, null); 

    ImageView icon = (ImageView) row.findViewById(R.id.icon); 
    icon.setImageResource(..your drawable's id...); 

    return view; 
} 
+12

請注意,你真的應該看看convertView,只有在你真正需要它們時纔會膨脹新的行。如果convertView不爲null,則它是之前膨脹的某個過去行,用於回收。只需重置圖標並返回回收的行。更少的垃圾創建,更快的執行。 – CommonsWare 2009-07-10 01:58:28

1

來自Google文檔的ArrayAdapter。

要使用比TextViews 其他東西的陣列顯示器,例如, ImageViews,或有一些數據 的除了的toString()結果填補了 意見,覆蓋getView(INT,查看, 的ViewGroup )返回所需的視圖類型 。

相關問題