2015-07-10 133 views
0

我在我的应用程序中有很多ListActivity类,它们的作用几乎相同:左侧为属性(TextView),右侧为值(Button)。当我按下按钮时,我想创建一个对话框。因为repetability的,我决定创建一个一般习惯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听众调用活性被破坏后。

P.S:SettingsPropertyPOJO与字符串名称和String值和tv_btn_layout是具有TextView的布局和上述一个Button如。

+0

问题是什么.. –

+0

据我所知,Android将自动删除所有监听器当活动被破坏。 – Sybregunne

+0

我想写干净的代码,就是这样。有没有人知道如何在执行程序的某个时刻监视内存中的变量? –

回答

0

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

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

,如果来自外部null调用。可以肯定的是,在访问mListener之前,请检查null的值

0

如果您的意图不是在活动被销毁时调用listener方法,请覆盖您的Activity的onfinish()并初始化布尔标志。

private boolean IsActivityAlive; 

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

而且里面的接口方法只是检查的布尔标志,如果是假的做别人所需要的动作忽略

void onButtonClicked (int position){ 
    if(!IsActivityAlive){ 

     //Do remaining task } 

    }