2011-03-25 281 views
8

我有兩個相同類型的ListView(A和B)(我創建的類)如何獲取ListView項目的視圖?

當我點擊A中的某個項目時,它將此對象添加到B上,如果再次單擊它,則將其刪除。 只有當選擇一個項目時,我使用view.setBackgroundColor(myColor)更改其背景。

我希望能夠刪除列表B(它的工作)的項目,但我想還重置背景色。我無法弄清楚如何得到我要刪除的這個項目的視圖。

任何想法?

+0

如果你告訴我們,你的一些代碼(相關部分)的,它會更容易幫助你。 – Phonon 2011-03-25 13:58:41

+0

我忘了提及我使用製表符在列表之間切換。關於代碼,沒有什麼太多的複雜,我伸出ArrayAdapters,和我的onClick使用view.setBackgroundColor(myColor) – Lucas 2011-03-28 15:25:44

回答

10

有沒有保證任何特定的ListView項甚至會在任何給定時間的視圖。如果該項目目前不在屏幕上,則可能無法查看。由於特定項目可能沒有視圖,因此嘗試獲取項目視圖可能沒有任何意義。

除此之外,因爲ListView控件的方式創建和重用的意見,你會看到一些奇怪的,不期望的效果,如果你只是直接修改意見。當用戶滾動瀏覽列表時,變得可見的項目將不正確地以與已經落在可見部分之外的其他項目相同的背景結束。

我不知道接下來是否實現你的功能,因爲我不知道發生變化後重建的費用清單的最好辦法。這裏是我可能會這樣做(可能是天真的):

  1. 將另一個布爾成員添加到您的數據對象,如isInSecondList
  2. 覆蓋getView()在適配器。在getView(),將背景設置爲正常或取決於該項目的isInSecondList的價值凸顯。
  3. 當一個項目被添加或從所述第二列表中刪除,更新數據對象,以反映改變,則調用適配器的notifyDataSetChanged()
+0

嗨,我不喜歡的解決方案。只有我不夠清楚,如果我告訴你我使用了一個包含兩個列表的TabActivity,那麼你可能會添加一些東西。 – Lucas 2011-03-29 10:10:50

+0

我沒有添加布爾值,而是檢查列表是否包含對象。至於步驟2和步驟3,我做了你的建議,並且完美地工作。謝謝! – Lucas 2011-04-20 12:43:52

+0

我想回答數字3是讓視圖列表視圖 – Milaaaad 2016-01-29 08:10:01

5
int position = 0; 
listview.setItemChecked(position, true); 
View wantedView = adapter.getView(position, null, listview); 
+0

YES,它的好方法android的列表視圖中的位置基本視圖謝謝你,我考10個或更多的方式最好的方式,但它的最好 – Milaaaad 2016-01-29 08:08:33

0

這裏是我做了什麼

private View oldSelection; 

@Override 
public void onItemClick(AdapterView<?> arg0, View view, int position, 
     long arg3) { 
     highlightSelectdListItem(position); 
} 

    public void highlightSelectdListItem(int position) { 
    clearPreviousSelection(); 
    View newsItemView = mGridVIew.getChildAt(position); 
    oldSelection = newsItemView; 
    newsItemView.setBackgroundColor(Color.GRAY); 
    } 


public void clearPreviousSelection() { 
    if (oldSelection != null) { 
     oldSelection.setBackgroundColor(Color.TRANSPARENT); 
    } 

} 
+0

它不是因爲關閉工作-screen列表視圖,例如,當i。由觸摸第50項上項點擊位置的代碼返回** **空---> '查看newsItemView = mGridVIew.getChildAt(位置);' 其因爲該列表查看從列表中查看的項目頂部計算位置不在列表中 – Milaaaad 2016-01-29 08:00:19