[英]How to remove custom listeners?
我的应用程序中有许多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是具有字符串名称和String
值的POJO ,而tv_btn_layout是具有TextView
和Button
的布局,如上所述。
如果要删除自定义侦听器,则必须将其重置为null。 您可以创建一个二传手
public void setButtonListener (final ButtonListener listener) {
mListener = listener;
}
并从外部调用null
。 只是要确保在访问mListener
之前,检查null
值
如果您的意图不是在活动被破坏的情况下不调用侦听器方法,则重写您的Activity的onfinish()并初始化布尔标志。
private boolean IsActivityAlive;
@Override
protected void onDestroy() {
IsActivityAlive=true;
super.onDestroy();
}
在您的接口方法内部,只需检查布尔标志是否为假,执行所需的操作,否则忽略
void onButtonClicked (int position){
if(!IsActivityAlive){
//Do remaining task }
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.