2011-08-30 57 views
2

我想突出顯示ListView(可觸摸界面)中的項目。目標是用戶將觸摸一個圖像,它會選擇ListView中的項目,將其移動到可見位置(它不會同時顯示在屏幕上),然後突出顯示與該位置相關的ListView中的項目通過改變項目視圖的背景顏色來改變圖像。我有一個自定義ListAdapter與每個項目的視圖。從列表適配器訪問子視圖

從圖片我可以得到在ListView項目的位置。從這我可以撥打listView.setSelection(selectedPos)。這將項目置於列表頂部。但是,我現在想要獲得該項目的視圖;我試過getFirstVisiblePosition()然而,直到列表已經鋪好(我正在響應對圖像的點擊),似乎不可用,所以我不能使用它。

沒有別的我嘗試的作品 - 我想要做的就是做一些像listView.getViewAt(index)但我根本找不到一種方法。我無法使用'selected',因爲我處於可觸摸模式。因爲看起來很簡單的事情 - 我浪費了一天的時間;任何幫助將不勝感激!

乾杯,

尼爾

+0

[getSelectedView](http://developer.android.com/reference/android/widget/AbsListView.html#getSelectedView())是否有同樣的問題? –

+0

如果你的界面是可觸摸的,那麼getSelectedView總是返回null :( –

+0

我試過緩存適配器中的視圖,但Android更改它們在我之下,所以我不能使用它!對於這樣一個簡單的請求,這是愚蠢的;我完全卡住 –

回答

0

我得到了這一輪執行以下操作:

  • 我第一次通過視圖時請求我可以檢查我自己的方法添加
  • 然後打上我希望在適配器來選擇項目查看該視圖是在我要求
  • 我得到那麼修改由GetView

    返回這似乎是最簡單的選項所提出的觀點的位置。

0

嘗試列表視圖創建自己的自定義適配器。例如:

private class CustomAdapter extends ArrayAdapter<RowData> { 
     public CustomAdapter(Context context, int resource, List<RowData> objects) { 
      super(context, resource, objects); 
     } 
     @Override 
     public View getView(int position, View convertView, ViewGroup parent) { 
      //convertView holds the view for each item. 
      TextView txt = (TextView)convertView.findViewById(R.id.button); 
      //do some other stuff with the views 
      return convertView; 
     } 
} 
+0

感謝您的回答,但我不能這樣做,因爲我不知道列表視圖是否已經有視圖,因此無法提供轉換視圖。這意味着我不一定會這樣做。正在訪問屏幕上的視圖 –

1

不應該listView.getChildAt(position)做你想做的?

+0

不幸的是,獲取childAt只給了我由ListView創建的視圖 - 並不是所有的視圖在整個列表視圖中如果我需要一個尚未創建的視圖(似乎只在需要時創建視圖),那麼我無法訪問視圖 - 這些視圖不會在調用listview完成之前完成,而且我不知道這是什麼時候。 –