一个自定义警报对话框,用于两个活动

时间:2017-05-11 07:36:55

标签: android android-layout

我有自定义alert Dialog。在此警报对话框中,用户在edittext中输入一些输入并关闭它。我想在其他活动中显示相同的警报对话框,其中输入值与用户在第一个活动中输入的值相同。我很困惑,如何在retaining its state的其他活动中传递一个对话框。

截图

Alert dialog without user input

ScreenShots

3 个答案:

答案 0 :(得分:2)

单击第一个活动的警报对话框的完成按钮,将用户输入保存在共享首选项中,或者只是通过使应用程序运行时,可以使用应用程序类变量来保存特定值,方法是使该变量保持静态,并在第二个活动中使用在editText中设置该值。

使用全局变量,如下面的链接

http://androidexample.com/Global_Variable_Or_Application_Context_Variable_-_Android_Example/index.php?view=article_discription&aid=114

否则您可以使用共享首选项,但我认为在应用程序运行时,您无需在手机内存中保存此类数据

使用以下链接创建共享首选项

https://www.tutorialspoint.com/android/android_shared_preferences.htm

答案 1 :(得分:1)

您的想法非常适合重复使用,因此需要创建具有自定义布局的自定义对话框类,并且您需要将show的值存储在另一个活动中,以及您使用首选项的值。

以下是自定义类:

public abstract class TempDialog extends Dialog {

    private Activity activity;

    public TempDialog(Context context) {
        super(context);
    }

    public TempDialog(Context context, int themeResId) {
        super(context, themeResId);
    }

    protected TempDialog(Context context, boolean cancelable, OnCancelListener cancelListener) {
        super(context, cancelable, cancelListener);
    }

    public Activity getActivity() {
        return activity;
    }

    public TempDialog initDialog(final Activity activity, boolean cancelble) {
        this.activity = activity;
        this.setCancelable(cancelble);
        this.setCanceledOnTouchOutside(true);
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        getWindow().setLayout(RelativeLayout.LayoutParams.FILL_PARENT, RelativeLayout.LayoutParams.FILL_PARENT);
        getWindow().setBackgroundDrawable(new ColorDrawable(android.graphics.Color.TRANSPARENT));
        setContentView(R.layout.layout_dialog_image_selection);

        final SharedPreferences sharedPreferences = getActivity().getSharedPreferences(getActivity().getPackageName(), 0);

        final EditText editText = (EditText) findViewById(R.id.editText);
        // Get and set Data if already store from previous activity
        if (sharedPreferences.contains("keyName")) {
            editText.setText(sharedPreferences.getString("keyName", ""));
        }
        Button btnDone = (Button) findViewById(R.id.btnDone);
        btnDone.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                // store data after click on done button
                sharedPreferences.edit().putString("keyName", "" + editText.getText().toString());
            }
        });
        return this;
    }

}

//打开对话框

TempDialog tempD = new TempDialog(getActivity(), R.style.AppDialogThme);
tempD.init(this,true);
tempD.show();

答案 2 :(得分:0)

您可以将所需的所有内容保留在附加内容中,然后在下一个活动中设置对话框值