I can not speak English well. But I will try my best. A NullPointerException occurred while writing the code. I want to create a dialog when the imageButton is pressed, and a Toast when the button in the dialog is pressed. But my code throws NullPointerException. I don't know why a NullpointerException occurs even though dialogFragment is passed as a parameter. Below is the code I wrote. Any help would be appreciated.
MainActivity.java
public class MainActivity extends AppCompatActivity {
ImageButton Button_MainActivity_Borrow;
FragmentManager fm;
CustomAlertWindowPenalty cawp;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button_MainActivity_Borrow = findViewById(R.id.Button_MainActivity_Borrow);
fm = getSupportFragmentManager();
cawp = new CustomAlertWindowPenalty(borrowListener);
BorrowORreturnListener listener = new BorrowORreturnListener(cawp);
Button_MainActivity_Borrow.setOnClickListener(listener);
}
View.OnClickListener borrowListener = new View.OnClickListener() {
@Override
public void onClick(View view) {
Toast.makeText(MainActivity.this, "Toast", Toast.LENGTH_SHORT).show();
}
};
public class CustomAlertWindowPenalty extends DialogFragment {
private View.OnClickListener buttonClickListener;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
public CustomAlertWindowPenalty(View.OnClickListener clickListener) {
buttonClickListener = clickListener;
}
@NonNull
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
Dialog dialog = new Dialog(getActivity());
LayoutInflater inflater = getActivity().getLayoutInflater();
View view = inflater.inflate(R.layout.custom_alert_window_penalty, null);
Button button_cawp_Yes = view.findViewById(R.id.button_cawp_Yes);
button_cawp_Yes.setOnClickListener(buttonClickListener);
dialog.setContentView(view);
dialog.getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
dialog.setCanceledOnTouchOutside(false);
return dialog;
}
@Override
public void onResume() {
super.onResume();
getDialog().getWindow().setLayout(ActionBar.LayoutParams.WRAP_CONTENT, ActionBar.LayoutParams.WRAP_CONTENT);
}
}
private class BorrowORreturnListener implements View.OnClickListener{
CustomAlertWindowPenalty cawp;
public BorrowORreturnListener(CustomAlertWindowPenalty cawp) {
this.cawp = cawp;
}
@Override
public void onClick(View view) {
cawp.show(fm,"");*this is error*
}
}
}
This is Logcat error
java.lang.NullPointerException: Attempt to invoke virtual method 'void com.example.myapplication2.MainActivity$CustomAlertWindowPenalty.show(androidx.fragment.app.FragmentManager, java.lang.String)' on a null object reference
at com.example.myapplication2.MainActivity$BorrowORreturnListener.onClick(MainActivity.java:101)
at android.view.View.performClick(View.java:6274)
at android.view.View$PerformClick.run(View.java:24859)
at android.os.Handler.handleCallback(Handler.java:789)
at android.os.Handler.dispatchMessage(Handler.java:98)
at android.os.Looper.loop(Looper.java:164)
at android.app.ActivityThread.main(ActivityThread.java:6710)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:240)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:770)