Android 如何停止冻结listView

Android 如何停止冻结listView,android,listview,Android,Listview,我有一个带有自定义BaseAdapter的listView。每个列表项都有一个可单击的按钮。 私有列表项=新的ArrayList() 我的问题是,当我滚动列表时,应用程序冻结。 如何修复它?每次创建新视图时,它都会重用视图,这与listview的功能完全相反 删除View v=null并使用传入的convertView参数 public View getView(final int position, View convertView, ViewGroup parent) { if(co

我有一个带有自定义BaseAdapter的listView。每个列表项都有一个可单击的按钮。 私有列表项=新的ArrayList()

我的问题是,当我滚动列表时,应用程序冻结。
如何修复它?

每次创建新视图时,它都会重用视图,这与listview的功能完全相反

删除
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;
}

有关在ListView本身而不是每一行上捕获触摸的示例,请参见。

这仍然会在每次调用
getView()
时创建一个新的
OnClickListener
,即至少为每一行创建一个新的
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;
}