【问题标题】:Change Background Color of Clicked Child in Expandable ListView Android更改可扩展 ListView Android 中单击的子项的背景颜色
【发布时间】:2012-06-19 06:34:01
【问题描述】:

我想更改在 ExpandableListView 中单击的子项的背景颜色。 也就是说,当点击任何孩子时,它的背景颜色应该会改变。 我正在尝试以这种方式进行操作,但它选择了其他行,而不是已单击的行。

public boolean onChildClick(ExpandableListView parent, View v,
        int groupPosition, int childPosition, long id) {

    parent.getChildAt(childPosition).setBackgroundColor(Color.DKGRAY);

    return false;
}

请告诉我我可能缺少什么。

【问题讨论】:

    标签: android background-color expandablelistview


    【解决方案1】:

    我就是这样解决的。

    View _lastColored;
    public boolean onChildClick(ExpandableListView parent, View v,
            int groupPosition, int childPosition, long id) {
        _groupPosition = groupPosition;
    
    
        if(_lastColored != null)
        {
        _lastColored.setBackgroundColor(Color.TRANSPARENT);
        _lastColored.invalidate();
        }
        _lastColored = v;
        v.setBackgroundColor(Color.rgb(214, 214, 214));
    
    
        return false;
    }
    

    【讨论】:

    • 好代码,谢谢!
    • @NiteshVerma:谢谢!很高兴它能有所帮助。 :)
    • @Swayam :不错的代码。但是是否可以在 onChildClick() 之外更改子视图的背景颜色?
    • @ParagKadam :您能否详细说明“在 onChildClick() 之外”的含义?我的意思是,您需要视图的参考。只要你有想要改变背景的视图的引用,你可以在任何地方进行。
    • 我保存了我在 onChildClick() 中获得的视图,并尝试为其设置背景颜色,但不幸的是没有任何反应。
    【解决方案2】:

    假设您尝试直接引用您的视图并像这样设置背景,

    public boolean onChildClick(ExpandableListView parent, View v,
            int groupPosition, int childPosition, long id) {
    
             v.setBackgroundColor(Color.BLUE);
    
        return false;
    }
    

    【讨论】:

    • 是的!这可行,但即使单击另一个孩子,颜色也会持续存在。我的目的是突出显示哪个孩子被选中,所以当另一个孩子被选中时,其他孩子应该恢复正常。
    • 然后您必须手动找出单击了哪个子项并将颜色设置为它并从先前选择的子项中删除颜色。您可以保持被点击的孩子的位置或使用其他更好的策略来实现这一点。
    【解决方案3】:

    我认为你应该使用

    public boolean onChildClick(ExpandableListView parent, View v,
            int groupPosition, int childPosition, long id) {
    
    
        Object obj = parent.getTag();
          if(obj instanceof View){
                 ((View) obj).findViewByID(<id of main ViewGroup of row>).setBackgroundColor(Color.<your normal color>);
             }
    
    
        v.findViewByID(<id of main ViewGroup of row>).setBackgroundColor(Color.DKGRAY);
    
    
     parent.setTag(v);
    
    
    
        return false;
    }
    
    
    parent.getChildAt(childPosition).findViewByID(<id of main ViewGroup of row >).setBackgroundColor(Color.DKGRAY);
    
    or 
    
    
    v.findViewByID(<id of main ViewGroup of row>).setBackgroundColor(Color.DKGRAY);
    

    第二个http://developer.android.com/reference/android/widget/ExpandableListView.OnChildClickListener.html#onChildClick(android.widget.ExpandableListView, android.view.View, int, int, long)

    【讨论】:

    • 你能解释一下 findViewByID 部分吗?
    • 我在以这种方式选择项目时遇到问题,当我在简单列表中使用时,如果您在 getView 中使用转换视图,那么在向下滚动时,它会显示其他视图被选中...... .
    • 非常感谢您的帮助。我已经使用了 Andro 的技术并成功了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-11-16
    • 2014-04-27
    • 1970-01-01
    • 2019-08-20
    • 2011-01-14
    • 1970-01-01
    • 2012-03-10
    相关资源
    最近更新 更多