【发布时间】:2015-07-06 15:33:39
【问题描述】:
只是我的问题如下。
我正在实现一个 ExapndableListView,第一组的孩子有一个由这 3 个组成的布局:TextView、ImageView、ImageView。
现在,当单击一个孩子时,我使用 v.findViewById().setVisibility() 设置两个图像视图之一的可见性,并且它的工作效果与我想象的一样好。
问题是当列表有超过 10 个孩子时,android系统在向下滚动时使用顶部最后一个隐藏的视图回收视图,现在当我单击位置“0”的子级时,我只切换那个视图的图像,而其他视图没有改变,到目前为止很好,但是当我向下滚动并且android系统使用位置“11”的子级中的子级“0”视图回收视图时,它会更改对应于子级“11”的textView,但用于子级“11”的视图是孩子“0”的视图,因此与之前切换的相同图像出现在孩子“11”的视图上,就好像它也被点击了一样,但事实并非如此!
我正在这样做:
@Override
public View getChildView(final int parentPosition, final int childPosition, boolean isLastChild, View convertView, ViewGroup parent) {
Log.d("status","parent : "+parentPosition + " child : " + childPosition + " View : "+convertView + " ViewGroup : "+parent);
int itemType = 25;
itemType = getChildType(parentPosition, childPosition);
String child_title = (String) getChild(parentPosition,childPosition);
if (convertView == null)
{
if (itemType == 0)
{
LayoutInflater inflater = (LayoutInflater) ctx.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
convertView = inflater.inflate(R.layout.activities2_child_layout, parent, false);
} else if (itemType == 1) {
LayoutInflater inflater = (LayoutInflater) ctx.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
convertView = inflater.inflate(R.layout.activities2_child2_layout, parent, false);
} else if (itemType == 2) {
LayoutInflater inflater = (LayoutInflater) ctx.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
convertView = inflater.inflate(R.layout.activities2_child2_layout, parent, false);
}
}
if (itemType == 0)
//region parent 0 child handling
{
Log.d("Child", childPosition + " : " + child_title);
final TextView child_textview = (TextView) convertView.findViewById(R.id.activities2_child_txt);
final ImageView img_Likes = (ImageView) convertView.findViewById(R.id.activities2_img_like);
final ImageView img_Dislikes = (ImageView) convertView.findViewById(R.id.activities2_img_dislike);
child_textview.setText(child_title);
child_textview.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
switch (AAChildClicks[childPosition]) {
case 0:
AAChildClicks[childPosition]++;
img_Likes.setVisibility(View.VISIBLE);
//add to total
All_Likes.add(child_textview.getText().toString());
Log.d("Likes", "Likes + " + child_textview.getText().toString());
break;
case 1:
AAChildClicks[childPosition]++;
img_Likes.setVisibility(View.GONE);
img_Dislikes.setVisibility(View.VISIBLE);
String child = child_textview.getText().toString();
//remove from total
All_Likes.remove(child_textview.getText().toString());
Log.d("Likes", "Likes - " + child_textview.getText().toString());
//add to total
All_Dislikes.add(child_textview.getText().toString());
Log.d("Likes", "Dislikes + " + child_textview.getText().toString());
break;
case 2:
AAChildClicks[childPosition] = 0;
img_Likes.setVisibility(View.GONE);
img_Dislikes.setVisibility(View.GONE);
String child2 = child_textview.getText().toString();
//remove from total
All_Dislikes.remove(child_textview.getText().toString());
Log.d("Likes", "Dislikes - " + child_textview.getText().toString());
break;
}
}
});
}
//endregion
if (itemType == 1)
//region parent 1 child handling
{
TextView child_textview = (TextView) convertView.findViewById(R.id.activities2_child2_txt);
child_textview.setText(child_title);
}
//endregion
if (itemType == 2)
//region parent 2 child handling
{
TextView child_textview = (TextView) convertView.findViewById(R.id.activities2_child2_txt);
child_textview.setText(child_title);
}
//endregion
return convertView;
}
如何避免这种重复/错误?!
【问题讨论】:
-
请发布整个getChildView方法。
-
@NameSpace 我刚刚为你调整了代码
标签: android listview expandablelistview