Я пытаюсь разработать тележку в диалоговом окне предупреждения, чтобы, когда пользователь выбирает элемент из представления ресайлера, диалоговое окно предупреждения запрашивает имя соответствующего элемента, чтобы выбрать количество этого элемента в диалоговом окне предупреждения. Проблема, с которой я столкнулся, заключается в том, что я не могу отобразить какую-либо информацию в диалоговом окне предупреждения о действии. Я нашел множество руководств, показывающих связь от диалогового окна предупреждения до активности, но никак иначе. До сих пор я пытался создать интерфейс внутри действия и реализовать его в классе диалогового окна предупреждения, но безрезультатно.
My Activity. java
firebaseDatabase = FirebaseDatabase.getInstance();
databaseReference = firebaseDatabase.getReference();
private DialogListener listener;
/* RecyclerView Set Up */
databaseReference = FirebaseDatabase.getInstance().getReference("Category");
recyclerViewDetails.setLayoutManager(new LinearLayoutManager(this));
FirebaseRecyclerOptions<CategoryModel> options = new FirebaseRecyclerOptions.Builder<CategoryModel>()
.setQuery(databaseReference.orderByChild("Type").equalTo(t_id), CategoryModel.class)
.build();
firebaseRecyclerAdapter = new FirebaseRecyclerAdapter<CategoryModel, RestaurantDetailsViewHolder>(options) {
@NonNull
@Override
public RestaurantDetailsViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.restaurant_details_view, parent, false);
RestaurantDetailsViewHolder viewHolder = new RestaurantDetailsViewHolder (v);
viewHolder.setOnClickListener(new RestaurantDetailsViewHolder.ClickListener() {
@Override
public void onItemClick(View view, int position) {
/* Call to Method */
cartDialog();
}
});
return viewHolder;
}
@Override
protected void onBindViewHolder(@NonNull RestaurantDetailsViewHolder holder,
int position, @NonNull CategoryModel model) {
holder.item_name.setText(model.getItemName());
holder.item_ingredients.setText(model.getIngredients());
holder.item_price.setText("" + model.getPrice());
holder.setItemImage(model.getImage());
listener.applyText(model.getItemName()); /* APP CRASHES WHERE EVER I PUT THIS LINE OF CODE */
}
};
recyclerViewDetails.setAdapter(firebaseRecyclerAdapter);
firebaseRecyclerAdapter.startListening();
// INVOKING THE CARTDIALOG CLASS
private void cartDialog() {
CartDialog cartDialog = new CartDialog();
cartDialog.show(getSupportFragmentManager(), "Cart Dialog");
}
@Override
public void onAttachFragment(@NonNull Fragment fragment) {
super.onAttachFragment(fragment);
listener = (DialogListener) fragment;
}
// Interface for Cart Dialog
public interface DialogListener{
void applyText(String name);
}
Мой AlertDialog (CartDialog. java) класс
public class CartDialog extends AppCompatDialogFragment implements RestaurantDetailsActivity.DialogListener {
private TextView item;
@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.cart_dialog_layout, null);
item = view.findViewById(R.id.item_name_on_cart_dialog);
builder.setView(view)
.setTitle("Cart")
.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) {
}
});
return builder.create();
}
@Override
public void applyText(String name) {
item.setText(name);
}
}
Журнал отладки
Java.lang.NullPointerException: Attempt to invoke interface method 'void org.example.foodhub.RestaurantDetailsActivity$DialogListener.applyText(java.lang.String)' on a null object reference
Пожалуйста, помогите решить эту проблему или укажите, что я делаю неправильно.