Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/361.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在对话框中保存用户输入?_Java_Android_Eclipse - Fatal编程技术网

Java 如何在对话框中保存用户输入?

Java 如何在对话框中保存用户输入?,java,android,eclipse,Java,Android,Eclipse,我基本上是在尝试创建一个对话框,将用户输入的文本作为“注释”,它保存注释并在下次打开对话框时显示注释,然后用户可以添加到注释或从注释中删除并再次保存。事先非常感谢 以下是我目前掌握的情况: AlertDialog.Builder alert = new AlertDialog.Builder(ViewTask.this); alert.setTitle("Task Note"); alert.setMessage("Please enter your note"); // Set an Edi

我基本上是在尝试创建一个对话框,将用户输入的文本作为“注释”,它保存注释并在下次打开对话框时显示注释,然后用户可以添加到注释或从注释中删除并再次保存。事先非常感谢

以下是我目前掌握的情况:

AlertDialog.Builder alert = new AlertDialog.Builder(ViewTask.this);
alert.setTitle("Task Note");
alert.setMessage("Please enter your note");

// Set an EditText view to get user input 
final EditText input = new EditText(ViewTask.this);
alert.setView(input);
alert.setPositiveButton("Save", new DialogInterface.OnClickListener() {
    public void onClick(DialogInterface dialog, int whichButton) {
        String value = input.getText().toString();
        //String usernote = value;
    }
});
alert.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
    public void onClick(DialogInterface dialog, int whichButton) {
    }
});
alert.setCancelable(false);
alert.show();
break;

您正在创建一个新字符串并为其赋值。用户单击“确定”后,字符串将从内存中消失。而是在类中创建一个局部变量,并在clicklistener中设置它

...
private String value;

...

alert.setPositiveButton("Save", new DialogInterface.OnClickListener() {
    public void onClick(DialogInterface dialog, int whichButton) {
        value = input.getText().toString();
    }
});
如果您想保存它,可以将局部变量设置为静态,如下所示

public static value;

然后,您可以通过调用YourActivity.value来访问所有类中的值。但是要注意,如果使用静态方法,字符串将一直占用内存空间,直到您将其设置为
value=null

,正如Ibrahim所说,一旦对话框关闭,字符串就会丢失。 为了使用它执行更多操作,例如将其保存到数据库或保存到SharedReferences,您应该将其传递回创建此对话框的活动,以便它能够处理该操作

在对话框或DialogFragment类中,添加一个公共接口,该接口带有一个可以从对话框中调用的方法

public class MyDialogFragment extends DialogFragment{

    private DialogListener myListener;
    private String text

    public interface DialogListener {
        public void onDialogAction(String text);

    @Override
    public void onAttach(Activity activity) {
        super.onAttach(activity);
        // Verify the host activity implements the callback interface
        try{
            myListener = (DialogListener) activity;
        } catch(ClassCastException e) {
            throw new ClassCastException(activity.toString()
                + " must implement DialogListener");

    @Override
    public Dialog onCreateDialog(Bundle savedInstanceState) {
        AlertDialog.Builder alert = new AlertDialog.Builder(getActivity());
        alert.setTitle("Task Note");
        alert.setMessage("Please enter your note");

        // Set an EditText view to get user input 
        final EditText input = new EditText(ViewTask.this);
        alert.setView(input);
        alert.setPositiveButton("Save", new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dialog, int whichButton) {
                String value = input.getText().toString();
                myListener.onDialogAction(value);
            }
        });
        alert.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dialog, int whichButton) {
            }
        });
        alert.setCancelable(false);
        return alert.create()
}
现在,您必须更改调用活动以实现我们刚刚在MyDialogFragment中创建的回调侦听器

public class MainActivity extends Activity
                      implements NoticeDialogFragment.NoticeDialogListener{

    private String text;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        ...
        SharedPreferences prefs = thist.sharedPreferences("com.example.app",
            Context.MODE_PRIVATE);
        text = prefs.getString("text_to_save", "");
    }        

    ...
    public void showDialog(){
        DialogFragment dialog = new DialogFragment();
        dialog.show(getFragmentManager(), "MyDialog");
    }

    @Override
    public void onDialogAction(String text){
        // Save the String for next time
        SharedPreferences prefs = this.getSharedPreferences("com.example.app",
            Context.MODE_PRIVATE);
        prefs.edit().putString("text_to_save", text).apply();
    }

如果你想把一些数据传递给你的对话框,比如你以前从对话框中得到的文本,你可以实现它。

你能描述一下什么不起作用吗?嗨@Takendarkk,一切都很好,但我不知道如何保存用户输入并在对话框重新打开时调用它。我希望能有一个参考或一个方法名,以便我能深入了解。非常感谢您的回复。您需要长期保存吗?就像一个用户可以退出你的应用程序,然后在2天后回来,仍然可以看到它?嘿@Takendarkk,是的,我希望能长期保存它。我想我需要一个数据库,我相信?我不确定。感谢您的回复。请检查此链接-->OP声明“我希望长期存储”,如中所示,用户可以关闭应用程序,等待几天,打开应用程序,然后仍然可以看到便笺。你的解决方案没有做到这一点。Opps,有点太快了,没有看到。。他可以通过在SharedReferences中保存值来解决这个问题。我看到你发布的链接已经有了参考。希望他能把它修好:)