2013-01-04 88 views
0

我有3項ExpandableList,每個項目有不同的屬性,如背景顏色,圖像,不同的項目...更改背景顏色在ExpandableList的兒童在滾動

我想改變顏色當我點擊它時子項目。當我不滾動時,我可以更改顏色,因爲我在視圖中保存了一個標籤。但是當我滾動並點擊其他孩子時,問題就出現了。所選的最後一個孩子不會更改顏色背景。

expandableList.setOnClickListener(new OnChildClickListener(){ 
... 
    View view =(View)parent.getTag(); 
    //Change last view colour 
    view.setBackgroundResourece(R.drawable.background_noselect); 
    ... 
    parent.setTag(v); 
} 

在適配器:

getChildView(int groupPosition, int childPosition, boolean isLastChild, View convertView, ViewGroup parent){ 
    ... 
    if(isSelect()){ 
     convertView.setBackgroundResource(R.drawable.background_select); 
    } 
} 
+0

「我可以改變顏色,當我不因爲我在視圖中保存了標籤,但是當我滾動並點擊其他孩子時,問題就出現了。「 - 這是什麼意思?請你可以解釋一下 –

+0

目標是我有一個可擴展列表,當我點擊一個元素時,我改變背景的顏色(例如紅色),之後,我點擊另一個元素,然後改變背景的顏色(例如紅色)並且我改變了我點擊的第一個元素的顏色(例如藍色)。我可以在不滾動列表的情況下執行這些操作,但是當我滾動列表時,我可以更改單擊的第一個元素的顏色。 – MARM

+0

你是什麼意思:「我可以在不滾動列表的情況下做這些事情」你的意思是你可以做到這一點,而不需要在ScrollView中封裝XML?或者你可以做到這一點,但當它在滾動它的過程中不起作用?或者你的意思是別的嗎? –

回答

0

我已經解決了這個問題,當我滾動expandableList我不能改變視圖的顏色。我做了兩件事。第一個是我在活動中添加以下代碼:

expandableList.setOnChildClickListener(new OnChildClickListener(){ 
     public boolean onChildClick(ExpandableListView parent, View v, 
       int groupPosition, int childPosition, long id) { 

      View view= null ; 
       //Select's item  
      select = expandableListInfo[groupPosition].get(childPosition); 
          //Get the last element visible in expandableList 
      int lastVis =expandableList.getLastVisiblePosition(); 
          //Get the first element vsible in the expandableList 
      int firstVis = listadoPedidos.getFirstVisiblePosition(); 
      int count = firstVis; 
      while (count <= lastVis) { 
       int viewPosition=count-firstVis; 
       long longposition = expandableList.getExpandableListPosition(count); 
       int type = ExpandableListView.getPackedPositionType(longposition); 
       if (type == ExpandableListView.PACKED_POSITION_TYPE_CHILD) { 
        int groupPositionLast = ExpandableListView.getPackedPositionGroup(longposition); 
        //Get the object selected before 
        //This tag is save in the adapter    
        Object lastObject = (Object)parent.getTag(R.id.tag_select); 
        view =(View) parent.getChildAt(viewPosition); 
        Object ob=view.getTag(R.id.tag_select); 
        if(ob.equals(lastObject)){ 
         //Change colour view 
        } 
       } 
      count++; 
      } 
      ... 
      parent.setTag(R.id.tag_select, select); 

      return false; 
     } 

    }); 

的第二件事是,在適配器getChildView添加下面的代碼:

convertView.setTag(R.id.tag_select, object); 
if(parent.getTag(R.id.tag_select).equals.object){ 
//// TODO 
}