我有一个带有自定义BaseAdapter的listView。每个列表项都有一个可点击的按钮。 private List items = new ArrayList();
public View getView(final int position, View convertView, ViewGroup parent) {
View v = null;
try {
v = inflater.inflate(R.layout.row, null);
TextView name = (TextView)v.findViewById(R.id.textView);
name.setText(items.get(position).getName());
imageButton = (ImageButton) v.findViewById(R.id.Button);
imageButton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// do something
}
});
} catch (Exception e) {
e.printStackTrace();
}
return v;
}
我的问题是当我滚动列表时应用程序会冻结。 我该如何解决?
答案 0 :(得分:4)
您每次都在创建一个新视图,这与列表视图的作用完全相反,它会重复使用视图。
删除View v = null
并使用传入的convertView
参数。
public View getView(final int position, View convertView, ViewGroup parent) {
if(convertView == null){
convertView = inflater.inflate(R.layout.row, null);
}
TextView name = (TextView)convertView.findViewById(R.id.textView);
name.setText(items.get(position).getName());
imageButton = (ImageButton) convertView.findViewById(R.id.Button);
/* NB
For efficiency sake see the link in Sparky's answer about itemClickListeners
instead of using onClickListeners
*/
imageButton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// do something
}
});
return convertView;
}
答案 1 :(得分:3)
有关捕获ListView本身的触摸的示例,请参阅Hello, ListView tutorial,而不是每个行。