如何在expandablelistview中对子项进行持久更改?

时间:2012-11-07 17:32:57

标签: android expandablelistview expandablelistadapter

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

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

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

2 个答案:

答案 0 :(得分:0)

您需要在全局变量中保留更改:

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

答案 1 :(得分:0)

android上的listviews使用convertview催化的非常重要的技术,当一个视图在滚动期间离屏时,它被放在屏幕上的其他地方,数据部分被更改。它使我们不会制作1000个视图,而是一次显示屏幕上的7个或8个视图。但是这些视图并不方便地返回到您想要的位置,这意味着您需要指定每个位置的内容,而不是隐含地发生这种情况。

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

下次,您向我展示代码,我会向您展示代码,或者没有人愿意帮助您。这会被不必要地问很多