2015-07-09 5 views
0

У меня есть моя основная активность с помощью кнопки, которая показывает диалог с 3 параметрами из массива строк. Работа с Dialog/Popup, но как я могу получить выбор пользователя в моем основном действии?Как получить список пользователей из списка Android?

Функции основной деятельности (да, нужен Int или так как возвращение):

public void showDialog(View view) 
{ 
    DifDialog dia = new DifDialog(); 
    dia.show(getFragmentManager(), "test"); 
} 

класс DifDialog:

public class DifDialog extends DialogFragment { 
public Dialog onCreateDialog(Bundle savedInstanceState) { 

    AlertDialog.Builder builder=new AlertDialog.Builder(getActivity()); 
    builder.setTitle(R.string.difficulty); 
    builder.setItems(R.array.diff, new DialogInterface.OnClickListener() { 
     @Override 
     public void onClick(DialogInterface dialog, int which) { 

     } 
    }); 

    Dialog dialog=builder.create(); 


return dialog; }} 

мне нужна "который" из OnClick в моем основном активность .. (я думаю;)

+0

А что-то вроде этого? http://stackoverflow.com/questions/10905312/receive-result-from-dialogfragment –

ответ

1

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

Для этого вы должны сначала определить интерфейс в фрагменте диалога.

В вашем действии, когда вы показываете фрагмент диалога, существует метод жизненного цикла acivity, называемый вызываемым вызовомAttachFragment(). Когда это вызвано, вы проверяете, что добавленный фрагмент - это ваш фрагмент диалога. Если это так, вы установите слушателя.

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

В диалоговом фрагмент кода: диалоговое

public class DifDialog extends DialogFragment { 

private DifDialogListener mListener; 

public interface DifDialogListener { 
    void onButtonOneClicked(); 
    void onButtonTwoClicked(); 
    void onButtonThreeClicked(); 
} 

public void setListener(DifDialogListener listener) { 
    if (listener == null) { 
     throw new NullPointerException(); 
    } 
    mListener = listener; 
} 

    public Dialog onCreateDialog(Bundle savedInstanceState) { 

    AlertDialog.Builder builder=new AlertDialog.Builder(getActivity()); 
    builder.setTitle(R.string.difficulty); 
    builder.setItems(R.array.diff, new DialogInterface.OnClickListener() { 
    @Override 
    public void onClick(DialogInterface dialog, int which) { 
     if (which == DialogInterface.BUTTON_POSITIVE) { 
      mListener.onButtonOneClicked(); 
     } else if (which == DialogInterface.BUTTON_NEGATIVE) { 
      mListener.onButtonTwoClicked(); 
     } else if (which == DialogInterface.BUTTON_NEUTRAL) { 
      mListener.onButtonThreeClicked(); 
     } 
}); 

Dialog dialog=builder.create(); 

возвращение; }}

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

showDialog() { 
    DifDialog dia = new DifDialog(); 
    dia.show(getFragmentManager(), "test"); 
} 

@Override 
onAttach(Fragment fragment) { 
    if (fragment instanceOf DifDialog) { 
     DifDialog frag = (DifDialog) fragment; 
     frag.setListener(new DifDialogListener() { 
      @Override 
      onButtonOneClicked() { 
       //Button one was clicked 
      } 

      @Override 
      onButtonTwoClicked() { 
       //Button two was clicked 
      } 

      @Override 
      onButtonThreeClicked() { 
       //Button three was clicked 
      } 
     }); 

    } 
} 
+0

спасибо, он работает хорошо! – Noxmiles

0

Надеется, что это помогает

List<String> optionsList = new ArrayList<String>(); 

    optionsList.add("Option One"); 
    optionsList.add("Option Two"); 
    optionsList.add("Option Three"); 

    final CharSequence[] options = optionsList.toArray(new CharSequence[optionsList.size()]); 

    AlertDialog.Builder builder = new AlertDialog.Builder(this); 
    builder.setTitle("Title"); 

    builder.setItems(options, new DialogInterface.OnClickListener() { 
     @Override 
     public void onClick(DialogInterface dialog, int item) { 
      if (options[item].equals("Option One")) { 
       //do something 
      } else if (options[item].equals("Option Two")) { 
       //do something 
      } else if (options[item].equals("Option Three")) { 
       //do something 
      } 
     } 
    }); 
    builder.show(); 
} 
Смежные вопросы