0

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

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

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

4

2 回答 2

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;
}
于 2012-11-07T17:53:59.500 回答
0

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

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

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

于 2012-11-07T17:57:40.230 回答