如何删除自定义侦听器?

时间:2015-07-10 09:16:10

标签: java android android-arrayadapter

我的应用中有很多ListActivity类,它们的行为几乎相同:左边是属性(TextView),右边是值(Button)。当我按下按钮时,我想做一些像创建对话框的操作。由于可重复性,我决定创建一个通用的自定义ArrayAdapter,如下所示:

public class GeneralTvBtnAdapter extends ArrayAdapter<SettingsProperty> {

private Context mContext;
private ArrayList<SettingsProperty> mProps;
private int mLayout;
private ButtonListener mListener;

public GeneralTvBtnAdapter(Context context, int tv_btn_layout, ArrayList<SettingsProperty> objects, ButtonListener listener) {
    super(context, tv_btn_layout, objects);
    mContext = context;
    mProps = objects;
    mLayout = tv_btn_layout;
    mListener = listener;
}

public void updateValue (int position, String newValue) {
    mProps.get(position).setValue(newValue);
    notifyDataSetChanged();
}

private class ViewHolder {
    TextView mName;
    Button mValue;
}

@Override
public View getView(final int position, View convertView, ViewGroup parent) {
    ViewHolder holder;
    if (convertView == null) {
        holder = new ViewHolder();
        LayoutInflater mInflater = LayoutInflater.from(mContext);
        convertView = mInflater.inflate(mLayout, null);
        holder.mName = (TextView) convertView.findViewById(R.id.prop);
        holder.mValue = (Button) convertView.findViewById(R.id.value);
        convertView.setTag(holder);
    }
    else {
        holder = (ViewHolder) convertView.getTag();
    }

    holder.mName.setText(mProps.get(position).getName());
    holder.mValue.setText(mProps.get(position).getValue());

    holder.mValue.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            mListener.onButtonClicked(position);
        }
    });

    return convertView;
}

public interface ButtonListener {
    void onButtonClicked (int position);
}
}

我想知道如何在销毁调用活动后删除ButtonListeners侦听器。

PS: SettingsProperty 是一个 POJO ,其中包含字符串名称和String值,而 tv_btn_layout 是一个{{ 1}}和TextView如上所述。

2 个答案:

答案 0 :(得分:0)

如果您的意图是删除自定义侦听器,则必须将其重置为null。您可以创建一个setter

public void setButtonListener (final ButtonListener listener) {
    mListener = listener;
}

并使用null从外部打电话。为确保在访问mListener之前,请检查null

答案 1 :(得分:0)

如果你的意图是在活动被销毁时不调用监听器方法,那么覆盖你的onfinish()并初始化boolean标志。

notification

在你的接口方法中只检查boolean flag如果为false则执行所需的操作否则忽略

private boolean IsActivityAlive;

   @Override
   protected void onDestroy() {
    IsActivityAlive=true;
     super.onDestroy();
    }