2014-01-26 109 views
0

我想限制列表視圖的打開項目爲一個。 如何關閉上一個打開的項目,何時點擊另一個項目?

例如: 項目#1被點擊 - 項目#1打開。
項目#2被點擊 - 項目#1關閉。項目#2打開。Android listView - 關閉項目點擊打開的項目

我嘗試用最後一個位置手動調用onItemClick函數,但它太複雜了。

這是我的onitemclick功能:

public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 
     animSlideDown = AnimationUtils.loadAnimation(getApplicationContext(), 
       R.anim.slide_down); 
     RelativeLayout wrapper = (RelativeLayout) view; 
     final RelativeLayout itemClosed = (RelativeLayout) wrapper.getChildAt(1); 
     final RelativeLayout fullItem = (RelativeLayout) wrapper.getChildAt(0); 
     boolean isOpen = itemClosed.getVisibility() == View.GONE; 


     if (!isOpen) { 
      fullItem.setVisibility(View.VISIBLE); 
      fullItem.startAnimation(animSlideDown); 
      itemClosed.setVisibility(View.GONE); 
     } else { 
      itemClosed.setVisibility(View.VISIBLE); 
      fullItem.setVisibility(View.GONE); 
     } 
    } 

感謝

回答

0

回答我自己的問題 - 這其實很簡單,我只需要通過「父母」的每個孩子並隱藏它,如果它不是當前視圖。希望它有助於某人..

@Override 
public void onItemClick(AdapterView<?> parent, View view, int position, 
     long id) { 
    RelativeLayout wrapper = (RelativeLayout) view; 
    final RelativeLayout itemClosed = (RelativeLayout) wrapper.getChildAt(1); 
    final RelativeLayout fullItem = (RelativeLayout) wrapper.getChildAt(0); 
    boolean isOpen = itemClosed.getVisibility() == View.GONE; 

    if (!isOpen) { 
     fullItem.setVisibility(View.VISIBLE); 
     itemClosed.setVisibility(View.GONE); 

     for (int i = 0; i < parent.getChildCount(); i++) { 
      RelativeLayout v = (RelativeLayout) parent.getChildAt(i); 
      if (v != view && v.getChildAt(0).getVisibility() == View.VISIBLE) { 
       v.getChildAt(0).setVisibility(View.GONE); 
       v.getChildAt(1).setVisibility(View.VISIBLE); 
      } 
     } 

    } else { 
     itemClosed.setVisibility(View.VISIBLE); 
     fullItem.setVisibility(View.GONE); 
    } 
} 
0

使用可擴展列表視圖用於這一目的。要實現你的邏輯,最好的選擇是可擴展列表視圖。

+0

我正在使用更多功能庫中的自定義列表視圖,我無法更改爲ExpandableListView。 –

相關問題