2015-07-10 171 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 } 

    }