2013-06-02 3 views
3

Я создал диалоговое окно DialogFragment с пользовательским AlertDialog, которое мне нужно показать в нескольких точках моего приложения. В этом диалоговом окне пользователю предлагается ввести некоторые данные.Действия для ожидания ввода фрагмента диалогового окна

Я хотел бы найти способ сделать операцию, в которой диалог призван ждать ввода пользователей, а затем выполнить переменное действие, когда пользователь нажимает кнопку ok (или ничего, если он нажимает на отмену).

AFAIK В Android нет «модального диалога», так что было бы правильным способом добиться этого (довольно обычного) поведения?

+0

http://developer.android.com/training/basics/fragments/communicating.html – Tarun

ответ

6

Чтобы позволить фрагменту связываться с его деятельностью, вы можете определить интерфейс в классе фрагментов и реализовать его в рамках Activity.

public class MyDialogFragment extends DialogFragment { 
OnDialogDismissListener mCallback; 

// Container Activity must implement this interface 
public interface OnDialogDismissListener { 
    public void onDialogDismissListener(int position); 
} 

@Override 
public void onAttach(Activity activity) { 
    super.onAttach(activity); 

    // This makes sure that the container activity has implemented 
    // the callback interface. If not, it throws an exception 
    try { 
     mCallback = (OnDialogDismissListener) activity; 
    } catch (ClassCastException e) { 
     throw new ClassCastException(activity.toString() 
       + " must implement OnDialogDismissListener"); 
    } 
} 


    ... 
} 

В диалоговом окне Ok слушателем добавить

mCallback.onDialogDismissListener(position); 

В вашей деятельности

public static class MainActivity extends Activity 
     implements MyDialogFragment.OnDialogDismissListener{ 
    ... 

    public void onDialogDismissListener(int position) { 
     // Do something here to display that article 
    } 
} 
+0

Это кажется как правильное решение. Действительно ли переменная «позиция» необходима? –

+2

нет необходимости .. u может передавать все, что вы хотите .. вам просто нужно изменить подпись функции .. – Tarun

+0

Хороший пример и именно то, что я искал – IHeartAndroid

Смежные вопросы