Я уверен на 100%, что метод onAttach вызывается до onCreate, поэтому как мой слушатель имеет значение null? Как это исправить?По сути, если я смогу получить значения из NameDialog, я назову другое действие (скажем, игру), которое реализует интерфейс NameDialogListener, поэтому я смогу переопределить методы getTexts в игровом действии.
public class NameDialog extends AppCompatDialogFragment {
private EditText firstPlayer;
private EditText secondPlayer;
private NameDialogListener listener;
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
LayoutInflater inflater = getActivity().getLayoutInflater();
final View view = inflater.inflate(R.layout.layout_dialog, null);
firstPlayer = view.findViewById(R.id.edit_player1);
secondPlayer = view.findViewById(R.id.edit_player2);
builder.setView(view)
.setTitle("Names")
.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
}
})
.setPositiveButton("Ok", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
String player1 = firstPlayer.getText().toString();
String player2 = secondPlayer.getText().toString();
listener.getTexts(player1, player2);
// Intent intent = new Intent(NameDialog.this.getActivity(), Game.class);
// startActivity(intent);
}
});
return builder.create();
}
@Override
public void onAttach(Context context) {
super.onAttach(context);
try {
listener = (NameDialogListener) context;
} catch (Exception e) {
e.printStackTrace();
}
}
public interface NameDialogListener {
void getTexts(String player1, String player2);
}
}
ОШИБКА - ЛОГ:
/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.anil.tictactoe, PID: 6009
**java.lang.NullPointerException: Attempt to invoke interface method 'void com.example.anil.tictactoe.NameDialog$NameDialogListener.getTexts(java.lang.String, java.lang.String)' on a null object reference
at com.example.anil.tictactoe.NameDialog$1.onClick(NameDialog.java:43)**
at com.android.internal.app.AlertController$ButtonHandler.handleMessage(AlertController.java:175)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:154)
at android.app.ActivityThread.main(ActivityThread.java:6776)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1518)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1408)