我创建ListView并使用BaseAdapter生成它的内容。ListView包含每一行的按钮和隐藏的ImageView。我把OnClickListener放在Button上给ImageView看。
设想情况:
问题:
问题:
这是代码:
发布于 2014-10-26 13:31:13
是否检查视图是否为null或其他
if(view == null)
view = ((Activity)YourActivity.get()).getLayoutInflater().inflate(R.layout.list_item, null);发布于 2014-10-26 13:45:33
ListView处理内存,即它回收视图,它不每次创建一个新视图(在您的情况下是vonverView),而是使用以前生成的视图(即convertView)。
因此,当您滚动时,您将看到(例如)row1在新创建的行上的视图。这就是你看到图像已经显示的原因。
为了避免这种情况,您必须将图像的可见性设置为View.INVISIBLE。
public View getView(int position, View convertView, ViewGroup parent) {
.....
final ImageView image = (ImageView)convertView.findViewById(R.id.image);
image.setVisibility(View.INVISIBLE);
((Button)convertView.findViewById(R.id.button)).setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View view) {
image.setVisibility(View.VISIBLE);
}
});
.....
}这样,滚动时就不会看到可见的图像,尽管,如果使第1行的图像可见,向下滚动,当再次向上滚动时,您将发现第1行的图像也是不可见的,在这种情况下,您必须将图像的状态保存在某个地方(例如,ArrayList或Map<Integer position, Boolean isvisible>)。
这样,您还必须检查ViewHolder Pattern是否有适配器,以获得更好的内存消耗。
希望这能有所帮助
https://stackoverflow.com/questions/26573088
复制相似问题