2012-04-23 7 views
5

複数のダイアログを重ねて表示することはできますか?ダイアログZレベルのようなものがありますか? 私はDialogFragmentを使用しています。ここでユーザーは要素を選択し、選択を確認したら、データベースに保存してサーバーに送信します。保存操作が失敗した場合、ユーザーに通知したいと思います...別のダイアログが可能ですか?そして、それは私の最初のダイアログをクリアしませんか? ありがとうございます。Android:複数のダイアログを1つずつ表示できますか?ダイアログZレベルのようなものがありますか?

答えて

4

確かに、複数のダイアログフラグメントを別のものの中に表示することは可能です。 zオーダーは作成順序によって異なります。

以下のコードには、必要な動作を持つFragmentActivityの例があります。

public class MyActivity extends FragmentActivity { 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     //...  
    } 

    public void onSave(View view) { 
     Intent intent = getIntent(); 

     this.setResult(RESULT_OK, intent); 
     finish(); 
    } 

    public void onCancel(View view) { 
     finish(); 
    } 

    public void SelectWeekDay(View view) { 
     DialogFragment selectWeekDayFragment = new SelectWeekDayFragment(); 
     selectWeekDayFragment.show(getSupportFragmentManager(), "WeekDayDialog"); 
    } 

    public class SelectWeekDayFragment extends DialogFragment { 

     @Override 
     public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
      View view = inflater.inflate(R.layout.week_day_dialog, container, true); 

      Button saveButton = (Button) view.findViewById(R.id.button_save); 
      saveButton.setOnClickListener(new View.OnClickListener() { 

       @Override 
       public void onClick(View view) { 
        CheckBox checkboxMonday = (CheckBox) getDialog().findViewById(R.id.checkBox_monday); 
        if (!checkboxMonday.isChecked()) { 
         DialogFragment saveErrorFragment = new SaveErrorFragment(); 
         saveErrorFragment.show(getSupportFragmentManager(), "SaveErrorFragment"); 
        } 
        else { 
         SaveToDb(); //Perform actions to store on db or what you wish 
         dismiss(); 
        } 
       } 
      }); 

      Button cancelButton = (Button) view.findViewById(R.id.button_cancel); 
      cancelButton.setOnClickListener(new View.OnClickListener() { 

       @Override 
       public void onClick(View v) { 
        dismiss(); 
       } 
      }); 

      return view;  
     } 
    } 

    public class SaveErrorFragment extends DialogFragment { 

     @Override 
     public Dialog onCreateDialog(Bundle savedInstanceState) { 
      return new AlertDialog.Builder(getActivity()) 
      .setMessage("You must select Monday").setPositiveButton("Ok", null).create(); 
     } 
    } 
} 
1

私のアドバイスは、ダイアログ内にViewFlipperを備えたカスタムレイアウトを使用して、プログレスバーまたは表示したいレイアウトを簡単に切り替えることです。複数のダイアログを表示したいのであれば、zオーダーは、作成された順番に依存します。最新のbeeingが上に表示されます。

0

通常、ちょっと注意してください。副作用を避けるために、ダイアログのライフサイクルを有効にしてください。たとえば、onStop()のような関数をチェックして子ダイアログが開いているかどうかを確認し、そうであれば閉じます。

理想的には、あなたが持っているダイアログのレイヤーを減らすのが理想的です(例えば、何百行ものコード行が終わるなど)。