【问题标题】:How can I make persistent changes to children in an expandablelistview?如何在可扩展列表视图中对子项进行持久更改?
【发布时间】:2012-11-07 17:32:57
【问题描述】:

所以我一直在尝试使用可扩展列表视图作为我的应用程序的优雅界面,但我一直无法从中提取所需的行为。当我单击一个孩子时,我可以将其背景更改为不同的颜色,或者将文本更改为不同的颜色,甚至更改文本本身。但是,当我滚动(让孩子离开可视区域)或折叠/展开组时,我经常做的任何更改都会消失。

那么,我该如何对孩子做出这些改变并让他们坚持下去?谢谢。

更新:重写 ExpandableListAdapter 的 getChildView() 方法以对子视图进行适当的更改结果工作得很好(即使没有适配器的 notifyDataSetChanged() 方法)。我的问题是一个愚蠢的状态切换(我在 onChildClick 中有它们,但在 getChildView 中有它们)。

【问题讨论】:

    标签: android expandablelistview expandablelistadapter


    【解决方案1】:

    android 上的列表视图利用convertview 催化的一项非常重要的技术,当视图在滚动过程中离开屏幕时,它会被放置在屏幕上的其他位置并更改数据部分。它使我们无法进行 1000 次观看,而是一次在屏幕上观看 7 或 8 次。但是这些视图不能方便地返回到您想要的位置,这意味着您需要指定每个位置的内容,而不是让这种情况隐式发生。

    那么,如何兑现?制作任何类型的数组列表或列表,以保存您的颜色状态,文本状态 w.e.并用任意方法标记它们(在整数数组列表中红色等于 3 或在字符串数组列表中红色 = "red")。然后很简单,在您的getView() 中指定如果arraylist 中的相应位置说明了什么,则执行某些操作。但是您还需要调用notifydatasetchanged() 来刷新列表视图。我建议你把它放在一些 onclicklistener 或其他东西中,因为如果它在 getView() 中没有边界,它会被不必要地调用 alot

    下一次,你给我看代码,我给你看代码,否则没人愿意帮你。这会被不必要地询问很多

    【讨论】:

    • 感谢您的回复!这是非常有用的。起初我没有发布代码,因为我认为答案足够简单,可以用英语给出(我并不完全正确)。我一直在使用 onChildClick 和 getChildView 进行更改,并且我在其他地方看到了 notifyDataSetChanged() 推荐。根据您的建议,我再次尝试,但它仍然导致我的 expandablelistview 停止响应任何点击。在撰写我对您的回复(包括代码)时,我发现错字/switcharoo 是我的问题。感谢您的宝贵时间。
    【解决方案2】:

    你需要将全局变量的变化持久化在:

     public void onGroupCollapsed(int groupPosition) {
     {
    

    然后从变量中读取它们并将它们分配给您的视图

     public void onGroupExpend (int groupPosition) {
     }
    

    或者当孩子被创建时:

    public View getChildView(int groupPosition, int childPosition, boolean isLastChild, View convertView, ViewGroup parent) {
    // assign new values / changes to your views before you return this view
    
    return v;
    }
    

    【讨论】:

    • 我不知道如何在 onGroupCollapse 或 onGroupExpand 监听器中获取子视图。虽然我一直在使用 getChildView,但在发现我的错误之后,它似乎运行良好!感谢您的回复!
    猜你喜欢
    • 1970-01-01
    • 2019-11-09
    • 1970-01-01
    • 1970-01-01
    • 2021-08-25
    • 2018-09-02
    • 1970-01-01
    • 2013-09-15
    • 1970-01-01
    相关资源
    最近更新 更多