我创建ListView并使用BaseAdapter生成其内容。 ListView包含每行的Button和隐藏的ImageView。我把OnClickListener放在Button上以显示ImageView。
情景:
问题:
问题:
这是代码:
UI线程
.....
adapter = new ContentAdapter(context, content);
listView.setListAdapter(adapter);
.....
ContentAdapter
.....
public View getView(int position, View convertView, ViewGroup parent) {
.....
final ImageView image = (ImageView)convertView.findViewById(R.id.image);
((Button)convertView.findViewById(R.id.button)).setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View view) {
image.setVisibility(View.VISIBLE);
}
});
.....
}
.....
答案 0 :(得分:0)
如果为null或其他什么
,请检查视图if(view == null)
view = ((Activity)YourActivity.get()).getLayoutInflater().inflate(R.layout.list_item, null);
答案 1 :(得分:0)
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);
}
});
.....
}
使用它,滚动时不会看到可见的图像,但是,如果你使row1的图像可见,然后向下滚动,当你再次向上滚动时你会发现row1的图像也是不可见的,在这种情况下你必须在某处保存图像的状态(例如ArrayList
或Map<Integer position, Boolean isvisible>
)。
话虽如此,您还必须检查ViewHolder Pattern
适配器,以获得更好的内存消耗。
希望这有帮助