Как отобразить элемент из RecyclerView (помещенный в действие) в диалоговом окне предупреждения - PullRequest
0 голосов
/ 16 июня 2020

Я пытаюсь разработать тележку в диалоговом окне предупреждения, чтобы, когда пользователь выбирает элемент из представления ресайлера, диалоговое окно предупреждения запрашивает имя соответствующего элемента, чтобы выбрать количество этого элемента в диалоговом окне предупреждения. Проблема, с которой я столкнулся, заключается в том, что я не могу отобразить какую-либо информацию в диалоговом окне предупреждения о действии. Я нашел множество руководств, показывающих связь от диалогового окна предупреждения до активности, но никак иначе. До сих пор я пытался создать интерфейс внутри действия и реализовать его в классе диалогового окна предупреждения, но безрезультатно.

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

Пожалуйста, помогите решить эту проблему или укажите, что я делаю неправильно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...