我想处理newgame按钮并在我的主要活动中添加播放器按钮。正如你所看到的,我在我的warningdialog类中定义了视图(它扩展了DialogFragment,我尝试了一个getter并尝试调用它,但是我得到了nullpointer异常,我尝试了其他方法,但应用程序崩溃了。这样做的最好方法是什么?我想这样做的原因是因为我在按下按钮时想要调用主要活动中的其他方法,所以我认为从主要活动处理对话框按钮是最佳选择。在主要活动中处理来自dialogfragment的按钮
这里是我的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一起使用,则可以定义一个接口回调,并使Activity实现接口。 –