簡體   English   中英

使用自定義對話框類時如何修改文本並單擊偵聽器?

[英]How to modify Text and click Listener while using custom Dialog Class?

我有一個帶有自定義布局的對話框類。 現在我想從不同的活動更改文本值和不同的按鈕單擊偵聽器。 我正在嘗試這樣做但出現錯誤。 這是我的源代碼。 任何幫助或建議將非常感激。

public class MyDialog extends Dialog {

    TextView dialogTitle, dialogMessage;
    Button dialogCancel, dialogOk;

    public MyDialog(@NonNull Context context) {
        super(context);
    }

    @Override
    public void dismiss() {
        super.dismiss();
    }

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.dialog_layout);

        //..................REFERENCE
        dialogTitle = (TextView) findViewById(R.id.txt_ttl);
        dialogMessage = (TextView) findViewById(R.id.txt_msg);

        dialogCancel = (Button) findViewById(R.id.btn_cancel_id);
        dialogOk = (Button) findViewById(R.id.btn_ok_id);

        //dialogTitle.setText("title has been changed");
    }

    private void dialogCancel(){

    }

    private void dialogOk(){

    }

    public void changeDialogTitle(String dTitle){
        dialogTitle.setText(dTitle);
    }
}

從我正在使用的其他活動中

    ...onCreate{...
    MyDialog myDialog = new MyDialog(this);
}

// on button click show dialog
public void showDialog(View view) {
    myDialog.changeDialogTitle("Title");
    myDialog.show();
}

是的,也許您可​​以將標題作為參數傳遞

首先在 MyDialog 類中添加參數

       public class MyDialog extends Dialog {

    TextView dialogTitle, dialogMessage;
    Button dialogCancel, dialogOk;
    String title;
    public MyDialog(@NonNull Context context, String title) {
        super(context);
        this.title = title;
    }

    @Override
    public void dismiss() {
        super.dismiss();
    }

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.dialog_layout);

        //..................REFERENCE
        dialogTitle = (TextView) findViewById(R.id.txt_ttl);
        dialogMessage = (TextView) findViewById(R.id.txt_msg);

        dialogCancel = (Button) findViewById(R.id.btn_cancel_id);
        dialogOk = (Button) findViewById(R.id.btn_ok_id);
        // set your title in here
        dialogTitle.setText(title);
    }

    private void dialogCancel(){

    }

    private void dialogOk(){

    }

    public void changeDialogTitle(String dTitle){
        dialogTitle.setText(dTitle);
    }
}

然后在你的 Activity 上調用這樣的函數

MyDialog myDialog = new Mydialog(this,"My New Title");
myDialog.show

請看下面的代碼片段:

public class MyDialog extends Dialog {

    TextView dialogTitle, dialogMessage;
    Button dialogCancel, dialogOk;
    String title;

    public MyDialog(@NonNull Context context, final String title) {
        super(context);
    this.title=title;
    }

    @Override
    public void dismiss() {
        super.dismiss();
    }

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.dialog_layout);

        //..................REFERENCE
        dialogTitle = (TextView) findViewById(R.id.txt_ttl);
        dialogMessage = (TextView) findViewById(R.id.txt_msg);

        dialogCancel = (Button) findViewById(R.id.btn_cancel_id);
        dialogOk = (Button) findViewById(R.id.btn_ok_id);

        dialogTitle.setText(title);
    }

    private void dialogCancel(){

    }

    private void dialogOk(){

    }

    public void changeDialogTitle(String dTitle){
        dialogTitle.setText(dTitle);
    }
}


----------


// on button click show dialog
public void showDialog(View view) {
 MyDialog myDialog = new MyDialog(this, "Title");
  myDialog.show();
}

MyDialog myDialog = new MyDialog(this, "Title"); 您可以將標題和消息發送到構造函數中,它將在 Dialog onCreate 方法時在 UI 上設置。

你有空指針異常,因為你在顯示對話框之前更改了對話框標題。 因此,首先顯示對話框,然后更改標題。 將其更改為:

myDialog.show();
myDialog.changeDialogTitle("Title");

看起來您正在嘗試創建一個獨立於生命周期的實用程序類,您只需將 onCreate 方法的代碼移動到 MyDialog Constructor 中,如下所示

public class MyDialog extends Dialog {

    TextView dialogTitle, dialogMessage;
    Button dialogCancel, dialogOk;

    public MyDialog(@NonNull Context context) {
        super(context);
        setContentView(R.layout.dialog_layout);

        //..................REFERENCE
        dialogTitle = (TextView) findViewById(R.id.txt_ttl);
        dialogMessage = (TextView) findViewById(R.id.txt_msg);

        dialogCancel = (Button) findViewById(R.id.btn_cancel_id);
        dialogOk = (Button) findViewById(R.id.btn_ok_id);

        //dialogTitle.setText("title has been changed");
    }

    @Override
    public void dismiss() {
        super.dismiss();
    }

    private void dialogCancel(){

    }

    private void dialogOk(){

    }

    public void changeDialogTitle(String dTitle){
        dialogTitle.setText(dTitle);
    }
}

現在可以隨時更改視圖的內容。 它應該工作。

暫無
暫無

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

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