Android:ListView更改错误的行布局可见性
我有上百个项目的列表视图。每个项目都有几个线性布局,但其中一个是可见性。消失了!每个项目都有文本视图和图像。在“图像”上单击“我想设置具有可见性的线性布局”。转到“视图.可见”。它可以正常工作,直到你向下滚动listview,然后每四个项目都有相同的布局设置为可见,但我只需要点击一个!下面是getView方法:Android:ListView更改错误的行布局可见性,android,listview,Android,Listview,我有上百个项目的列表视图。每个项目都有几个线性布局,但其中一个是可见性。消失了!每个项目都有文本视图和图像。在“图像”上单击“我想设置具有可见性的线性布局”。转到“视图.可见”。它可以正常工作,直到你向下滚动listview,然后每四个项目都有相同的布局设置为可见,但我只需要点击一个!下面是getView方法: @Override public View getView(final int position, View convertView, ViewGroup parent) { f
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
final ImageView imgForClick;
View vi = convertView;
if (convertView == null)
vi = inflater.inflate(R.layout.custom_row, null);
final LinearLayout hiddenLayout = (LinearLayout)vi.findViewById(R.id.hiddenLayout);
imgForClick = (ImageView)vi.findViewById(R.id.imageView3);
imgForClick.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
hiddenLayout.setVisibility(View.VISIBLE);
}
});
return vi;
}
这是因为您正在循环使用视图,所以布局会在单击时更改,然后在其他行中使用该布局以节省内存 您需要记住每一行的状态,才能知道布局是否应该可见 有这样的东西:
public View getView(final int position, View convertView, ViewGroup parent) {
...
if (shouldBeVisible.get(position)) {
hiddenLayout.setVisibility(View.VISIBLE);
} else {
hiddenLayout.setVisibility(View.GONE);
}
这样,布局将始终以某种方式设置
shouldbeevisible
是一个列表
,它让您知道哪些行的布局应该可见或不可见
编辑--
另一种方法是删除视图回收,但是这将极大地损害性能,不应该这样做,但我只是解释一下列出所有选项
你可以把这条线移走
if(convertView==null)
让Android总是膨胀一个新的视图,而不是尽可能使用回收的视图。阅读这篇文章正是提醒我重用视图的需要。我不明白为什么来自其他列表项的数据会跳到我的ListView的顶部。