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

时间:2014-07-22 03:04:26

标签: java android eclipse

我基本上试图创建一个对话框,将用户输入文本作为"注意"它会保存注释并在下次打开对话框时显示注释,然后用户可以添加注释或从注释中取出并再次保存。非常感谢你提前。

这是我到目前为止所拥有的:

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;

2 个答案:

答案 0 :(得分:0)

您正在创建一个新String并为其分配值。用户点击" OK"字符串将从内存中消失。而是在类中创建一个局部变量,并在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

答案 1 :(得分:0)

就像易卜拉欣说的那样,一旦对话关闭,你就会丢失字符串。 为了使用它执行更多操作,例如将其保存到数据库或保存到sharedPreferences,您应该将其传递回创建此对话框的Activity,以便它可以处理它。

来自Passing events Back To The Dialog's Host

在Dialog或DialogFragment类中,添加一个公共接口,其中包含一个可以从Dialog调用的方法。

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();
    }

如果您想将一些数据传递给对话框,请说出之前从中获得的文字,您可以实现此answer