【问题标题】:edit text in alert dialog在警报对话框中编辑文本
【发布时间】:2013-12-21 18:58:41
【问题描述】:

我有这个对话框

case DIALOGO_EDIT:

final EditText editText = new EditText(context);

builder.setView(editText);

builder.setPositiveButton("Send", new DialogInterface.OnClickListener() {
    public void onClick(DialogInterface dialog, int i) {

    }
});

builder.setNegativeButton("Close", null);

break;

但是当我旋转设备时,对话框消失...我该如何解决这个问题并在旋转过程中保持对话框?或者像 WhatsApp 一样以“全屏”显示编辑文本

【问题讨论】:

    标签: java android xml


    【解决方案1】:

    当屏幕旋转时,Activity实际上是被重启并杀死的,所以你需要保存并能够使用生命周期方法来恢复数据。看看这里:Saving Persistent State

    你可能想看看this question here

    【讨论】:

      【解决方案2】:

      避免这个问题的最好方法是使用DialogFragment。

      创建一个扩展为 DialogFragment 的新类。覆盖 onCreateDialog 并返回您的旧 Dialog 或 AlertDialog。

      你可以用DialogFragment.show(fragmentManager, tag)向他们展示。

      这里有一个像监听器这样的活动的例子:

      public class MyDialogFragment extends DialogFragment {
      
          public interface YesNoListener {
              void onYes();
      
              void onNo();
          }
      
          @Override
          public void onAttach(Activity activity) {
              super.onAttach(activity);
              if (!(activity instanceof YesNoListener)) {
                  throw new ClassCastException(activity.toString() + " must implement YesNoListener");
              }
          }
      
          @Override
          public Dialog onCreateDialog(Bundle savedInstanceState) {
              return new AlertDialog.Builder(getActivity())
                      .setTitle(R.string.dialog_my_title)
                      .setMessage(R.string.dialog_my_message)
                      .setPositiveButton(android.R.string.yes, new DialogInterface.OnClickListener() {
      
                          @Override
                          public void onClick(DialogInterface dialog, int which) {
                              ((YesNoListener) getActivity()).onYes();
                          }
                      })
                      .setNegativeButton(android.R.string.no, new DialogInterface.OnClickListener() {
      
                          @Override
                          public void onClick(DialogInterface dialog, int which) {
                              ((YesNoListener) getActivity()).onNo();
                          }
                      })
                      .create();
          }
      }
      

      在你调用的Activity中:

      new MyDialogFragment().show(getSupportFragmentManager(), "tag"); // or getFragmentManager() in API 11+
      

      这类问题已经问过了,也有解决方案,这三个问题与你的问题相匹配(并且他们回答了):

      Android Best way of avoid Dialogs to dismiss after a device rotation

      Android DialogFragment vs Dialog

      How can I show a DialogFragment using compatibility package?

      【讨论】:

        猜你喜欢
        • 2016-08-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-05-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多