Я хочу обработать кнопку новой игры и добавить кнопку игроков в свой основной вид деятельности. Как вы можете видеть, я определяю представление в своем классе warningdialog (который расширяет DialogFragment, я пытался использовать getter и пытался называть это, но я получаю исключение nullpointer, я также пробовал другие методы, но приложение разбилось.Работа с кнопками из диалогового окна в основном действии
Whats лучший способ сделать это? Причина, по которой я хочу это сделать, заключается в том, что у меня есть другие методы в основной деятельности, которые я хочу вызвать, когда нажимается кнопка, поэтому я считаю, что обращение к диалоговому окну из основной активности - лучший выбор.
Вот мой Warningdialog, который простирается от dialogfragment
public class WarningDialog extends DialogFragment {
public Button mNewGame, mAddPlayersBtn;
private ImageButton mCloseBtn;
/**
* Method to close the dialog
*/
private View.OnClickListener mBtnListener = new View.OnClickListener(){
@Override
public void onClick(View v){
dismiss();
}
};
public WarningDialog() {
}
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setStyle(DialogFragment.STYLE_NORMAL, R.style.DialogTheme);
}
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
return inflater.inflate(R.layout.newgame_dialog,container,false);
}
@Override
public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
mAddPlayersBtn = (Button) view.findViewById(R.id.btnAddPlayers);
mNewGame = (Button) view.findViewById(R.id.btnNewGame);
mCloseBtn = (ImageButton) view.findViewById(R.id.btnClose);
//closing the dialog
mCloseBtn.setOnClickListener(mBtnListener);
}
public Button getmNewGame() {
return mNewGame;
}
Основной метод деятельности:
private void warningDialog(){
final WarningDialog warningDialog = new WarningDialog();
warningDialog.show(getSupportFragmentManager(),"Warning");
warningDialog.getmNewGame().setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View arg0) {
}
});
}
Спасибо. Он работал, но не уверен, что это лучшая практика? когда думаешь об инкапсуляции. –
Если вы хотите удалить плотную муфту так, чтобы этот DialogFragment можно было использовать с несколькими действиями, вы можете определить обратный вызов интерфейса и сделать Activity реализацией интерфейса. –