Как получить данные из магазина, когда нажимаете на recyclerView - PullRequest
0 голосов
/ 24 апреля 2018

Я уже получил данные от firestore до RecyclerView, затем мне нужно щелкнуть мой recyclerView и показать данные, которые я щелкаю, чтобы создать новую активность. Как получить данные?

This is the image of my FireStore Data

Это код для основной деятельности

List<FoodModel>models;


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    recyclerView = findViewById(R.id.recycler_home);

    db = FirebaseFirestore.getInstance();

    getData();
}

public void getData(){

    models = new ArrayList<>();

    db.collection("Food").get().addOnSuccessListener(new OnSuccessListener<QuerySnapshot>() {
        @Override
        public void onSuccess(QuerySnapshot documentSnapshots) {

            if (!documentSnapshots.isEmpty()){
            for (DocumentSnapshot docSnap: documentSnapshots.getDocuments()) {
                FoodModel model = docSnap.toObject(FoodModel.class);
                models.add(model);

                foodAdapter = new FoodAdapter(models, getApplicationContext(), new FoodAdapter.OnFoodClick() {
                    @Override
                    public void OnClick(FoodModel food) {

                        Intent intent = new Intent(MainActivity.this, FoodActivity.class);
                        startActivity(intent);

                    }
                });

                recyclerView.setAdapter(foodAdapter);
                recyclerView.setLayoutManager(new LinearLayoutManager(getApplicationContext(), LinearLayoutManager.VERTICAL, false));
            }
                }
        }

    }).addOnFailureListener(new OnFailureListener() {
        @Override
        public void onFailure(@NonNull Exception e) {

        }
    });
}

Это адаптер

public class FoodAdapter extends RecyclerView.Adapter<FoodAdapter.FoodViewHolder>{

LayoutInflater inflater;
List<FoodModel> foodModels;
OnFoodClick listener;
Context context;


public FoodAdapter(List<FoodModel> foodModels, Context context, OnFoodClick listener) {
    this.foodModels = foodModels;
    this.context = context;
    this.listener = listener;
    inflater = LayoutInflater.from(context);

}

@Override
public FoodViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
    View view = inflater.inflate(R.layout.view_holder_food, null, false);
    FoodViewHolder holder = new FoodViewHolder(view);
    return holder;
}

@Override
public void onBindViewHolder(FoodViewHolder holder, int position) {

    FoodModel model = foodModels.get(position);
    holder.tvName.setText(model.getName());
}

@Override
public int getItemCount() {
    return foodModels.size();
}

public void addItem(FoodModel food){
    foodModels.add(food);
    notifyDataSetChanged();
}

public class FoodViewHolder extends RecyclerView.ViewHolder {

    TextView tvName;

    public FoodViewHolder(View itemView) {
        super(itemView);

        tvName = itemView.findViewById(R.id.tv_name);

        itemView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                int position = getLayoutPosition();
                listener.OnClick(foodModels.get(position));

            }
        });
    }
}

public interface OnFoodClick{
    public void OnClick(FoodModel food);
}

}

Это мое второе занятие. Я хочу показать имя, тип и цену от Firestore. когда я щелкаю представление рециркулятора, данные не отображаются в действии.

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_food);

    firedb = FirebaseFirestore.getInstance();

    tvName = findViewById(R.id.tv_food_name);
    tvType = findViewById(R.id.tv_type);
    tvPrice = findViewById(R.id.tv_price);


    getFoodData();
}

private void getFoodData(){

        firedb.collection("Food").document().get()
                .addOnSuccessListener(new OnSuccessListener<DocumentSnapshot>() {
            @Override
            public void onSuccess(DocumentSnapshot documentSnapshot) {
                if (documentSnapshot.exists()){
                    loadData(documentSnapshot.toObject(FoodModel.class));
                }
            }
        }).addOnFailureListener(new OnFailureListener() {
            @Override
            public void onFailure(@NonNull Exception e) {

            }
        });

    }
}

private void loadData(FoodModel foodModel){
    tvName.setText(foodModel.getFoodName());
    tvType.setText(foodModel.getType());
    tvPrice.setText(foodModel.getPrice());

}

}

Это модель еды

public class FoodModel {

String foodName;
String type;
String price;

public FoodModel() {
}

public String getFoodName() {
    return foodName;
}

public void setFoodName(String foodName) {
    this.foodName = foodName;
}

public String getType() {
    return type;
}

public void setType(String type) {
    this.type = type;
}

public String getPrice() {
    return price;
}

public void setPrice(String price) {
    this.price = price;
}

}

1 Ответ

0 голосов
/ 24 апреля 2018

создать интерфейс для обработки события клика в виде рециркулятора, как это .. определите приведенный ниже код в адаптере.

 onItemClickListner onItemClickListner;

public void setOnItemClickListner(RecyclerViewAdpater.onItemClickListner onItemClickListner) {
    this.onItemClickListner = onItemClickListner;
}

public interface onItemClickListner {
    void onClick(String str);//pass your object types.
}

@Override
public void onBindViewHolder(ItemViewHolder holder, int position) {
    // below code handle click event on recycler view item.
    String data=mStringList.get(position);
    holder.itemView.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            onItemClickListner.onClick(data);
        }
    });
}

затем, после подключения адаптера активности к представлению переработчика, затем вызовите этот метод, чтобы получить элемент клика в представлении переработчика.

   recyclerViewAdpater.setOnItemClickListner(new RecyclerViewAdpater.onItemClickListner() {
        @Override
        public void onClick(String str) {
            Log.d("Click Value",str);
        }
    });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...