我有一个关于ListView和听众的问题。假设我的应用程序中有一个列表视图。其中的每一项都包含一个复选框。我有以下代码:
public View getView(final int position, View convertView, ViewGroup parent) {
    CheckBox checkbox = (CheckBox)v.findViewById(R.id.checkbox);
    checkbox.setOnCheckedChangeListener(new OnCheckedChangeListener(){
        public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
            // some code
        }               
    });
}如您所见,每次调用getView方法时,我都会设置。那么,设置侦听器是正确的吗?还是我应该设置一次?表现不好吗?还是没什么关系?如果我多次设置侦听器,它是否会覆盖以前的侦听器,还是会为该事件设置多个侦听器?
发布于 2015-01-31 11:47:45
您设置的每个侦听器都将覆盖前一个监听器(如果有的话)。
设置一个侦听器或其他任何东西都会消耗大量的时间,但是这里还创建了一个新的匿名类,这将花费更长的时间。
为了最大限度地提高性能,我要做一些调整:
convertViews缓存视图ViewHolder模式避免多次findViewById调用convertView == null)下面是一个例子:
private static class ViewHolder {
    CheckBox checkBox;
}
private CompoundButton.OnCheckedChangeListener mCheckListener = new CompoundButton
        .OnCheckedChangeListener() {
    @Override
    public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
        Log.e("TAG", "CheckBox position: " + buttonView.getTag());
    }
};
@Override
public View getView(int position, View convertView, ViewGroup parent) {
    ViewHolder holder;
    if (convertView == null) {
        /* Inflate the layout here */
        holder = new ViewHolder();
        holder.checkBox = (CheckBox) convertView.findViewById(R.id.checkbox);
        /* Find other views in you layout here */
        holder.checkBox.setOnCheckedChangeListener(mCheckListener);
        // Set the holder as tag, so you can fetch it later for re-use
        convertView.setTag(holder);
    } else {
        // Fetch the holder
        holder = (ViewHolder) convertView.getTag();
    }
    // Set the checkbox position
    holder.checkBox.setTag(position);
    return convertView;
}如果您不熟悉使用convertViews和ViewHolder模式,则应该查看解释这一切的ListView的世界。
发布于 2015-01-31 11:29:13
表现不好吗?还是没什么关系?
这不重要。设置者只分配对象。
如果我多次设置侦听器,它是否会覆盖以前的侦听器,还是会为该事件设置多个侦听器?
在您的复选框的每个实例中,只有一个名为setOnCheckedChangeListener。ListView是一个特殊的案例,因为它的循环机制。
https://stackoverflow.com/questions/28251013
复制相似问题