I'm new to Android Studio and I'm learning on how to use Fragament Dialog from inside a Fragment. I'd like to ask why it says "null objext reference".
Here is the code for the fragment :
public class PelangganFragment extends Fragment implements CreatePelangganDialog.CreatePelangganListener,
PelangganLVAdapter.OnPelangganClickListner,
UpdatePelangganDialog.UpdatePelangganListener {
private RecyclerView mRecyclerView;
private View parent;
private Context context;
private PelangganViewModel mViewModel;
private FragmentPelangganBinding fragmentPelangganBinding;
private PelangganLVAdapter mAdapter;
public static PelangganFragment newInstance() {
return new PelangganFragment();
}
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container,
@Nullable Bundle savedInstanceState) {
//return inflater.inflate(R.layout.fragment_pelanggan, container, false);
mViewModel = new ViewModelProvider(this).get(PelangganViewModel.class);
fragmentPelangganBinding = FragmentPelangganBinding.inflate(inflater,container,false);
View root = fragmentPelangganBinding.getRoot();
parent = root.findViewById(android.R.id.content);
FloatingActionButton fab = root.findViewById(R.id.fab);
mRecyclerView = root.findViewById(R.id.recyclerView);
//context = this;
LinearLayoutManager linearLayoutManager = new LinearLayoutManager(this.getContext());
mRecyclerView.setLayoutManager(linearLayoutManager);
mRecyclerView.setHasFixedSize(true);
//Set adapter to RecyclerView
mAdapter = new PelangganLVAdapter();
mAdapter.setItemOnClick(this);
mRecyclerView.setAdapter(mAdapter);
fab.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
openCreatePelangganDialog();
}
});
return root;
}
private void openCreatePelangganDialog() {
CreatePelangganDialog createPelangganDialog = new CreatePelangganDialog();
createPelangganDialog.show(
getChildFragmentManager(), CreatePelangganDialog.TAG);
}
@Override
public void saveNewPelanggan(ListViewModelPelanggan pelanggan) {
mViewModel.insert(pelanggan);
snackBar("Pelanggan Saved");
}
}
here is the code for the FragmentDialog, the error occurs on this class and I commented on which line the error occurs :
public class CreatePelangganDialog extends DialogFragment {
private EditText mNama;
private EditText mNik;
private EditText mALamat;
private EditText mPekerjaan;
private EditText mKeperluan;
private Button mSaveBtn;
private CreatePelangganListener mListener;
@NonNull
@Override
public Dialog onCreateDialog(@Nullable Bundle savedInstanceState) {
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
LayoutInflater inflater = getActivity().getLayoutInflater();
View view = inflater.inflate(R.layout.pelanggan_dialog,null);
builder.setView(view);
builder.setCancelable(true);
builder.setTitle("Tambah Pelanggan");
mNama = view.findViewById(R.id.et_nama);
mNik = view.findViewById(R.id.et_nik);
mALamat = view.findViewById(R.id.et_alamat);
mPekerjaan = view.findViewById(R.id.et_Pekerjaan);
mKeperluan = view.findViewById(R.id.et_keperluan);
mSaveBtn = view.findViewById(R.id.btn_save);
mSaveBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String nama = mNama.getText().toString();
String nik = mNik.getText().toString();
String alamat = mALamat.getText().toString();
String pekerjaan = mPekerjaan.getText().toString();
String keperluan = mKeperluan.getText().toString();
if(nama.isEmpty()||nik.isEmpty()||alamat.isEmpty()||pekerjaan.isEmpty()||keperluan.isEmpty()) {
return;
}
else {
ListViewModelPelanggan pelanggan = new ListViewModelPelanggan(nama,nik,alamat,
pekerjaan,keperluan);
mListener.saveNewPelanggan(pelanggan); //the error occurs here
dismiss();
}
}
});
return builder.create();
}
@Override
public void onAttach(@NonNull Context context) {
super.onAttach(context);
mListener = (CreatePelangganListener) getTargetFragment();
}
public interface CreatePelangganListener{
void saveNewPelanggan(ListViewModelPelanggan pelanggan);
}
public static String TAG = "Tambah Pelanggan Dialog";
}
I solved my problem by replacing getTargetFragment()
with getParentFragment()
in these lines
@Override
public void onAttach(@NonNull Context context) {
super.onAttach(context);
mListener = (CreatePelangganListener) getParentFragment();
}