2015-11-19 178 views
1

我正在嘗試創建一個ListView,您可以一次點擊不超過4個項目。 這些項目必須彼此相鄰。ListView - 獲取點擊項目的相鄰項目

當我點擊我的第一個項目,我想看看是否先前或以下項目已被點擊。

注:當我單擊一個項目時,我更改背景顏色。所以如果我想告訴一個項目是否被點擊,我只想檢查背景顏色。

public void OnItemClick(AdapterView<?> parent, View, view, int position, long id){ 

    View currentItem = view; 
    currentItem.setBackgroundResource(R.drawable.li_gradient); 

    // How do I get the view in front of and behind currentItem 
    // to check their current background color? (Assuming they exist) 

} 

回答

0

您應該在您的適配器類中執行此操作,模型項需要具有後臺資源屬性。

只投適配器,拿到上一個或下一個項目,設置新的背景和通知的ListView

public void OnItemClick(AdapterView<?> parent, View, view, int position, long id){ 

    YourAdapterClass adapter = (YourAdapterClass) parent.getAdapter(); 

    // TODO check if is a valid position 
    YourItem item = (YourItem) adapter.getItem(position-1); 
    item.setBackgroundResource(R.drawable.li_gradient); 

    adapter.notifyDataSetChanged(); 
} 
0

請記住,如果活動被重建(例如因爲配置更改的),或者如果列表視圖會重新繪製(例如,當它收到更改通知時),它不會自動了解onClick方法中對視圖所做的更改,並且背景更改可能會丟失。我會用itemSelected(int i),clearAllSelected(),getSelectedItems()等方法制作一個自定義AdapterView,並使adapterview成爲跟蹤和維護這些更改以及渲染背景的單一責任點。

卡梅爾