2016-03-01 95 views
0

我有一個inputDialog,允許一些文本輸入。點擊保存後,inputDialog將檢查輸入的文本是否已經可用(以防止重複輸入)。如果是這種情況下,一個新的AlertDialog被創建,只是在陳述「您輸入的值已經存在」,只有一個「確定」按鈕關閉這個AlertDialog。這一切都有效。我應該如何從另一個對話框返回到前一個對話框?

我想在AlertDialog關閉之後再次彈出inputDialog,其中包含用戶在仍然在editText字段之前輸入的值。

我不期待在editText字段中將這些值重新存入的任何問題(如果發生雙重入口錯誤時將它們存儲在變量中,如果發生雙重入口錯誤,請在editText上設置這些變量。以愚蠢的方式做這件事,請讓我知道)。

我卻有着與獲得第一(inputDialog)對話框回來麻煩。您在下面看到的代碼是我的inputDialog片段的代碼(代碼是簡化的,所以如果有東西似乎丟失了,它可能是。請讓我知道,所以我可以將其添加回來。)

因此,要重複自己:在解散第二個對話框後,我怎樣才能返回到前一個對話框?

StuffManagerInputDialogFragment.java:

public class StuffManagerInputDialogFragment extends DialogFragment { 

    EditText nameInputField; 
    EditText tagInputField; 
    DBHandler dbHandler; 
    StuffManagerFragment f = new StuffManagerFragment(); 

    @Override 
    public Dialog onCreateDialog(Bundle savedInstanceState) { 
     LayoutInflater inflater = getActivity().getLayoutInflater(); 

     final View v_iew = inflater.inflate(R.layout.fragment_inputdialog, null); 

     nameInputField = (EditText) v_iew.findViewById(R.id.inputdialogname); 
     tagInputField = (EditText) v_iew.findViewById(R.id.inputdialogtag); 
     dbHandler = new DBHandler(getActivity(), null, null, 1); 
     final MainActivity ma = (MainActivity) getActivity(); 

     final AlertDialog.Builder newLinkDialog = new AlertDialog.Builder(getActivity()); 
     newLinkDialog.setView(v_iew) 
       .setTitle("New Link") 
       .setPositiveButton("Save", new DialogInterface.OnClickListener() { 
        @Override 
        public void onClick(DialogInterface dialog, int which) { 
         String nameInputFieldText = nameInputField.getText().toString(); 
         String tagInputFieldText = tagInputField.getText().toString(); 
         ArrayList<String> nameArray = dbHandler.nameArrayMethod(); 
         ArrayList<String> tagArray = dbHandler.tagArrayMethod(); 
         NavigationView navigationView = (NavigationView) getActivity().findViewById(R.id.nav_view); 
         Menu menu = navigationView.getMenu(); 

         if (nameArray.contains(nameInputFieldText) || tagArray.contains(tagInputFieldText)) { 
          if (nameArray.contains(nameInputFieldText) && tagArray.contains(tagInputFieldText)) { 
           AlertDialog.Builder errorBoth = new AlertDialog.Builder(getActivity()) 
             .setTitle("Error") 
             .setMessage("The name and tag you entered are already in use.") 
             .setIcon(R.drawable.ic_error_black) 
             .setPositiveButton("Ok", new DialogInterface.OnClickListener() { 
              @Override 
              public void onClick(DialogInterface dialog, int which) { 
               //Return to previous dialog here 
              } 
             }); 
             errorBoth.show(); 
          } 
         } else { 
          dbHandler.addLink(nameInputFieldText, tagInputFieldText); 
          nameArray = dbHandler.nameArrayMethod(); 

          int nameArraySize = (nameArray.size() - 1); 
          MenuItem item = menu.add(R.id.group1, nameArraySize, 1, nameArray.get(nameArraySize)); 

          Toast.makeText(getContext(), "'" + nameInputFieldText + " - " + tagInputFieldText + "' link saved.", Toast.LENGTH_SHORT).show(); 

          ma.addSMVFFragments(); 
          f.hideDeleteAllButton = false; 
          getActivity().invalidateOptionsMenu(); 
         } 
        } 
       }) 
       .setNegativeButton("Cancel", null); 
     return newLinkDialog.create(); 
    } 
} 
+0

您能詳細談談那一點?我必須保存/檢索什麼價值?你是在談論editText字段中的文本還是關於對話框本身? – Timmiej93

回答

1

一個更好的解決方案是讓您的輸入佈局的對話片段,而如果文本驗證失敗對話框片段將在OK顯示AlertDialog。輸入對話框片段在這種情況下不會消失,它將保留在後臺,所以當您關閉警告對話框以告訴用戶輸入無效時,您將返回到輸入對話框。

爲了防止對話片段辭退就OK了,你會覆蓋在onStart,並獲得了OK按鈕的引用,並設置聽者那裏,就像這樣:

@Override 
public void onStart() { 
    super.onStart(); 
    AlertDialog alertDialog = (AlertDialog) getDialog(); 
    if (alertDialog != null) { 
     mOKButton = alertDialog.getButton(AlertDialog.BUTTON_POSITIVE); 
     mOkButton.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       if (field OK) { 
        // save data 
        dismiss(); 
       } else { 
        // show error dialog 
       } 
      } 
     }); 
    } 
} 
+0

您在描述'AlertDialog'時彈出而不關閉'inputDialog'的方式是更好的解決方案。 但是,我想我應該說'inputDialog'實際上是一個對話框片段。 爲了防止對話框片段消失,你說我應該重寫onStart。我應該在哪裏做這件事? – Timmiej93

+1

權,因此,如果您輸入對話框已經是一個對話片段,然後沒有了一大堆你需要改變,只得到了確定按鈕處理程序在onStart且僅當該數據是有效的解僱。 默認情況下,當你點擊任何按鈕,所以設置在在onStart點擊監聽器將讓你重寫,只有解僱,當你想通過調用解僱()一個警告對話框會解散。 – Francesc

+0

所以,如果我得到這個正確的,我應該得到OK按鈕的按鈕處理程序(按鈕,駁回雙重入口錯誤)?我會在哪裏onStart?在對話框片段? – Timmiej93

相關問題