我的应用中有很多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
如上所述。
答案 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();
}