2010-03-08 42 views
0

我剛開始使用Android SDK,我有一個簡單的問題。我試圖在左邊設置一個帶有矩形顏色的ListView,然後爲每一行設置一些文本。我也想這樣做,所以我可以點擊列表中的每個條目並打開一個新的活動來顯示一些信息(類似於聯繫人列表)。任何人都有任何事例來幫助我?在Android上使用ListViews?

回答

1

如果您希望避免使用BaseAdapter的子類,但希望使用基於對象的自定義項目視圖和自定義項目點擊邏輯,以下是我所做的。

在我的代碼中,我正在處理一些模型對象的集合。我想在ListView中顯示這個模型對象的集合。我不能只將ModelObject的ArrayList傳遞給SimpleAdapter,因爲它期待鍵值對的列表(類似於List<Map<String, Object>>)。因此,我沒有在應用程序中使用我的對象的簡單集合,而是創建了一個自定義類來表示我的集合,它只是從我正在使用的結構派生而來。這樣,我可以繼續像以前一樣使用它,但是我可以添加一個方法,將其從代碼友好的集合轉換爲SimpleAdapter友好的集合。在我的情況下,我使用了一些由字符串屬性(如HashMap<String, ModelObject>)鍵入的HashMap。我的自定義收藏類將是ModelObjects(複數)延伸HashMap<String, ModelObject>。然後,ModelObjects將包含一個ToList()方法,其中我將對象轉換爲ArrayList<? extends HashMap<String, ?>>,然後我可以將其傳遞給SimpleAdapter構造函數以將其顯示在具有自定義視圖的列表中。

所以我現在可以構造一個SimpleAdapter與下列五個參數:

  1. 我的列表(在我的情況下,含活性)
  2. 我的目錄(如上所述)的上下文
  3. 的這些項目的自定義佈局的標識(R.layout.custom_list_item)
  4. 屬性名稱的字符串數組。這些是我的ToList方法在HashMap中的鍵。
  5. 每個項的屬性映射在上述(#4)到View衍生元素的id在我的自定義佈局

然後,在我的OnItemClickListener.onItemClick方法的int數組,我可以使用ARG3獲取我點擊列表中項目的位置,並使用它從我的集合中挑選出對象。你可以根據物品的任何屬性採取行動,或者在物品的某些屬性上做一個大開關/案例來啓動特定的活動或類似的東西。

唯一的竅門是您需要在未修改的活動中存儲集合的本地副本。否則,您可能會在onItemClick中通過id查找一個對象,並獲得與您所期望的不同的對象。這可能與上下文略有不同,但這裏是我的代碼的樣子:

ListView lvArtists = (ListView)findViewById(R.id.lvArtists); 
    SimpleAdapter adapter = new SimpleAdapter(
      this, 
      artists.ToList(), 
      R.layout.artist_list_item, 
      new String[] { "name", "imageIdSmall", "tracksCount", "tracksPending" }, 
      new int[] { R.id.artistListItemName, R.id.artistListItemImage, R.id.artistListItemAudioClips, R.id.artistListItemAudioClipsPending } 
      ); 
    lvArtists.setAdapter(adapter); 
    lvArtists.setOnItemClickListener(new OnItemClickListener() { 

     @Override 
     public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, 
       long arg3) { 
      Artist artist = artists.getSortedItem((int)arg3); 
      mArtistDialog.setArtist(artist); 
      mArtistDialog.show();    
     } 
    });