gpt4 book ai didi

java - 如何在 Dialog 和 Activity 之间传递值?

转载 作者:IT老高 更新时间:2023-10-28 21:04:54 33 4
gpt4 key购买 nike

我要求用户通过对话框输入:

package com.android.cancertrials;

import android.app.Dialog;
import android.content.Context;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;

public class CustomDialog extends Dialog {


private String name;
// private ReadyListener readyListener;
public static EditText etName;
public String zip;

public CustomDialog(Context context, String name) {
super(context);
this.name = name;
// this.readyListener = readyListener;
}

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.mycustomdialog);
setTitle("Enter the Zip Code ");
Button buttonOK = (Button) findViewById(R.id.ok);
buttonOK.setOnClickListener(new OKListener());
etName = (EditText) findViewById(R.id.EditZip);
}

private class OKListener implements android.view.View.OnClickListener {
@Override
public void onClick(View v) {
// readyListener.ready(String.valueOf(etName.getText()));
CustomDialog.this.dismiss();
}
}


}

当用户点击 OK 时,如何将在文本框中输入的值传递回启动它的 Activity 中的成员变量?

最佳答案

你可以用不同的方式做到这一点......实际上,如果你的对话框只有一个“确定”按钮可以关闭,你为什么不使用 AlertDialog.Builder 创建一个自定义对话框类而不是子类化 Dialog?

无论如何...假设您有充分的理由按照您的方式进行操作。在这种情况下,我会使用 ObserverPattern。像这样的:

public class CustomDialog extends Dialog  {


private String name;
public static EditText etName;
public String zip;
OnMyDialogResult mDialogResult; // the callback

public CustomDialog(Context context, String name) {
super(context);
this.name = name;
}

@Override
public void onCreate(Bundle savedInstanceState) {
// same you have
}

private class OKListener implements android.view.View.OnClickListener {
@Override
public void onClick(View v) {
if( mDialogResult != null ){
mDialogResult.finish(String.valueOf(etName.getText()));
}
CustomDialog.this.dismiss();
}
}

public void setDialogResult(OnMyDialogResult dialogResult){
mDialogResult = dialogResult;
}

public interface OnMyDialogResult{
void finish(String result);
}
}

关于你的 Activity :

CustomDialog dialog;
// initialization stuff, blah blah
dialog.setDialogResult(new OnMyDialogResult(){
public void finish(String result){
// now you can use the 'result' on your activity
}
});

阅读您的代码,您似乎已经尝试过类似的东西。

编辑:简单的方法

您仍然可以使用 mycustomdialog 布局。这就是您使用 AlertDialog.Builder 的方式:

LayoutInflater inflater = LayoutInflater.from(YourActivity.this);
final View yourCustomView = inflater.inflate(R.layout.mycustomdialog, null);

final TextView etName = (EditText) yourCustomView.findViewById(R.id.EditZip);
AlertDialog dialog = new AlertDialog.Builder(YourActivity.this)
.setTitle("Enter the Zip Code")
.setView(yourCustomView)
.setPositiveButton("OK", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int whichButton) {
mSomeVariableYouHaveOnYourActivity = etName.getText().toString();
}
})
.setNegativeButton("Cancel", null).create();
dialog.show();

关于java - 如何在 Dialog 和 Activity 之间传递值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4279787/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com