【问题标题】:Change background colour in children of ExpandableList when scroll滚动时更改 ExpandableList 子项的背景颜色
【发布时间】:2013-01-04 12:53:07
【问题描述】:

我有一个包含 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);
  }
}

【问题讨论】:

  • “我可以在不滚动时更改颜色,因为我在视图中保存了一个标签。但是当我滚动并单击其他子项时出现问题。” - 这是什么意思?请你解释一下
  • 目标是我有一个可扩展列表,当我单击一个元素时,我会更改背景颜色(例如红色),然后单击另一个元素并更改背景颜色(例如例如红色),然后我更改了单击的第一个元素的颜色(例如蓝色)。我可以在不滚动列表的情况下执行这些操作,但是当我滚动列表时,我可以更改单击的第一个元素的颜色。
  • 你的意思是什么:“我可以在不滚动列表的情况下做这些事情”你的意思是你可以在不将 XML 封装在 ScrollView 中的情况下做到这一点?或者你可以做到,但是当它在滚动的过程中它不起作用?还是你的意思是别的?

标签: android scroll expandablelistview


【解决方案1】:

我已经解决了这个问题,当我滚动expandableList时我无法改变视图的颜色。我做了两件事。首先是我在activity中添加了这段代码:

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

    });

第二件事是在adapter中添加getChildView下面的代码:

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

【讨论】:

    猜你喜欢
    • 2013-09-07
    • 1970-01-01
    • 1970-01-01
    • 2021-01-01
    • 2017-04-23
    • 2020-04-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多