0

私は 3 つのアイテムを持つ 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);
  }
}
4

1 に答える 1

0

問題を解決しました。expandableList をスクロールすると、ビューの色を変更できません。私は2つのことをしました。1 つ目は、アクティビティに次のコードを追加したことです。

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;
        }

    });

2 つ目は、アダプタに次のコードを getChildView に追加することです。

convertView.setTag(R.id.tag_select, object);
if(parent.getTag(R.id.tag_select).equals.object){ 
 //// TODO 
}
于 2013-01-07T14:22:24.150 に答える