2014-09-10 75 views
1

在我的Android應用程序中,我的主要Activity擴展了List Activity。我在那裏存儲稱爲Items的元素,它們的佈局由itemLayout xml文件定義,我使用自定義適配器(稱爲ItemAdapter)將數據傳輸到Main Activity中的List View。在itemLayout中,有一個ImageView,我的目標是在用戶單擊列表視圖中的特定項目時更改其圖像。在我看來,最簡單的方法是訪問特定項目(被點擊的項目)佈局,找到ImageView並調用方法setImageBitmap。我怎樣才能「找到」這個點擊項目的佈局?我在方法中嘗試了很多東西:在列表視圖中訪問特定項目的佈局

@Override 
protected void onListItemClick(ListView l, View v, int position, long id) { 
    super.onListItemClick(l, v, position, id); 

} 

但沒有任何工作。我必須添加任何東西到我的ItemAdapter?或者有可能在onListItemClick(…)中做,但我無法找到如何?

回答

4

你稍微錯誤的方式思考它。適配器是將數據映射到視圖的一種方式。所以如果你想改變一個特定的視圖是如何尋找一個給定的位置的,你需要改變它的相關數據,這樣渲染後的視圖就會改變。試圖直接修改視圖有點違背適配器是如何使用的。

所以在你的情況下,當用戶點擊一個項目。通過位置號在適配器中找到該項目。然後更新該項目並確保調用notifydataset。同時,您的適配器的getView()將處理顯示適當的圖像。

+0

這絕對是最好的解決方案。謝謝 – 2014-09-11 10:37:47

+0

我受到了另一個問題的困擾,你的第一段給了我我正在尋找的東西 – 2015-04-23 10:30:06

0

據我所知,你需要修改點擊項目的佈局,對吧?使用參數onListItemClicked:

v.findViewById(<your_img_view_id>) 

爲了獲得更好的性能,請使用視圖持有者。

+0

是,這種做法給我想要的結果改變ImageView的位圖,但我的目標是使更改永久。我忘了添加列表視圖與搜索功能連接,並且每次用戶輸入任何內容時,使用此方法所做的更改都會消失。或者,也許有一種方法只能通過其位置獲取物品的視圖?然後我可以在每次數據集更改時更改視圖。 – 2014-09-10 16:15:42

0

onListItemClick在按下ListView的元素時被觸發。如果你想恢復數據集中的元素,你可以簡單地調用

l.getItemAtPosition(position) 

返回的值必須強制轉換爲特定對象

0

是有可能在您的自定義adapter類的getView() mtheodü可以通過點擊它

看到這個代碼

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

     View rowView = convertView; 
     rowView = inflater.inflate(R.layout.playlist_item, null); 

     final ImageView im = (ImageView) rowView.findViewById(R.id.favorite); 
     im.setOnClickListener(new OnClickListener() { 

      @Override 
      public void onClick(View v) { 

       // Do your stuff here 

      } 
     }); 

     return rowView; 
    }