簡體   English   中英

如何將onclick處理程序傳遞給自定義對話框類

[英]how to pass an onclick handler to a custom dialog class

我正在嘗試創建一個用於顯示Yes / No AlertDialog的自定義類,但我希望onClick處理程序位於實例化自定義類的活動中。 到目前為止,自定義類看起來像這樣:

public class YesNoDialog  {
private Context gContext = null;
private DialogInterface.OnClickListener onClickListener;
private AlertDialog alertDialog = null;

public YesNoDialog(Context context,
               DialogInterface.OnClickListener listener) {
    this.gContext = context;
    this.onClickListener = listener;
}

public void ShowDialog() {

    AlertDialog.Builder alertDialogBuilder = new  
                      AlertDialog.Builder(this.gContext);
    alertDialogBuilder.setTitle("Hello World");
    alertDialogBuilder
            .setMessage("Are you sure?")
            .setCancelable(false)
            .setPositiveButton("Yes",this.onClickListener)
            .setNegativeButton("No",this.onClickListener);
    alertDialog = alertDialogBuilder.create();
    alertDialog.show();
  }
}

我的想法是將上下文和onClick處理程序傳遞給構造函數中的對象,然后將處理程序分配給.setPositive和.setNegative按鈕。

我在MainActivity類中實現了DialogInterface.OnClickListener:

public class MainActivity
        extends AppCompatActivity
        implements DialogInterface.OnClickListener {

並在MainActivity中創建了onClick處理程序,當在對話框中單擊“是”或“否”按鈕時,應該調用該處理程序。

@Override
public void onClick(DialogInterface dialog, int id) {
    Log.d("DIALOG RETURNS ID=", Integer.toString(id));
    dialog.dismiss();
}

我不確定我是否在正確的軌道上,但是我一直試圖找出如何將onClick處理程序傳遞給YesNoDialog對象。 我嘗試了幾種變體:

YesNoDialog dialog = new YesNoDialog(this, MainActivity.onClick);

沒有成功(不會編譯)。 我也嘗試過只傳遞上下文,假設這可能是我真正需要的.setPositive和.setNegative按鈕處理程序,但這也不起作用......這個調用需要一個DialogInterface.OnClickListener。

感覺就像我很親密,但我無法克服障礙。 任何人都可以幫助我連接點嗎?

創建一個類(DialogUtils)並在其中添加此方法。

public static void showPopUp(Context context
            , String title
            , String msg
            , String positiveBtnTxt
            , String negativeBtnTxt
            , DialogInterface.OnClickListener positiveBtnListener
            , DialogInterface.OnClickListener negativeBtnListener){

    final AlertDialog errorDialog;
    AlertDialog.Builder errorDialogBuilder = new AlertDialog.Builder(context, R.style.NativeDialogue);
    errorDialogBuilder.setTitle(title);
    errorDialogBuilder.setMessage(msg);
    errorDialogBuilder.setPositiveButton(positiveBtnTxt, positiveBtnListener);
    errorDialogBuilder.setNegativeButton(negativeBtnTxt, negativeBtnListener);
    errorDialog = errorDialogBuilder.create();
    errorDialog.show();
}

像這樣調用方法:

DialogUtils.showPopUp(this, "title", "message", "positive btn name", "Negative Btn name", new DialogInterface.OnClickListener() {
    @Override
    public void onClick(DialogInterface dialog, int which) {
        "Your action"
    }
}, new DialogInterface.OnClickListener() {
    @Override
    public void onClick(DialogInterface dialog, int which) {
        "Your action"
    }
});

這在Android中的對話框官方文檔中有所描述。 簡而言之,您需要執行以下步驟:

  1. 為對話框創建DialogFragment ,以便在設備旋轉時正確恢復或以其他方式更改配置。
  2. 創建一個允許您發送對話框結果的界面。
  3. 在活動中實現此接口。
  4. 將活動DialogFragment onAttachDialogFragmentonAttach內的接口,並將其存儲在某個字段中。 不要忘記在onDetach設置為null
  5. 單擊對話框按鈕時,可以調用相應的接口方法,活動將獲得結果。

或者,如果您只將此對話框用於一個活動,則可能不會聲明接口並只是存儲對活動的引用。

嘿,你可以在MainActivity類中創建一個方法。 如下。

public void onClickOnYesButton(int id){

}

傳遞MainActivity參考,如下所示。

public YesNoDialog(MainActivity context) {
this.gContext = context;
}

並使用MainActivity引用調用onClickOnYessButton

任務完成!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM