2012-04-23 7 views
5

¿Es posible mostrar varios cuadros de diálogo uno sobre otro? ¿Hay algo como Dialog Z-Level? Estoy usando DialogFragment donde el usuario elige elementos, cuando confirma su elección, se guarda en la base de datos y se envía al servidor. si falla la acción de guardado, me gustaría informar al usuario con ... ¿otro diálogo es posible? ¿Y no se borrará mi primer diálogo? Gracias de antemano.Android: ¿Puedo mostrar varios cuadros de diálogo uno sobre otro? ¿Hay algo como Dialog Z-Level?

Respuesta

4

De hecho, es posible mostrar varios Fragmentos de diálogo uno dentro de otro. El orden z depende del orden en que se crean.

En el siguiente código hay un ejemplo de FragmentActivity con el comportamiento que necesita.

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

Mi consejo es usar un diseño personalizado con un ViewFlipper dentro de su cuadro de diálogo para que pueda cambiar fácilmente entre una barra de progreso o los diseños diferentes que quiera mostrar. Si desea mostrar varios cuadros de diálogo, creo que el orden z depende del orden en que se crearon, el último mensaje que se muestra en la parte superior.

0

Por lo general, puede tener un poco de cuidado. Utilice el ciclo de vida del diálogo para su ventaja para evitar los efectos secundarios. Por ejemplo: puede verificar una función como onStop() para ver si el cuadro de diálogo secundario está abierto, y si es así, ciérrelo.

Idealmente, reducir la cantidad de capas de cuadros de diálogo que tiene es ideal, siempre y cuando esté en forma (por ejemplo: terminar siendo cientos de líneas de código más)

Cuestiones relacionadas