@apr1cot

RecyclerAdapter — Как Правильно Получить И Передать ID записи в новое активити?

Добрый день. Подскажите, пожалуйста. Сейчас при клике на item я получаю его position, а мне бы хотелось еще получить ID записи, и потом передать его в новое активити. Как такое можно реализовать?
5ddbbe23247ff005075977.png
Имеется следующий код:
RecyclerActivity
public class RecyclerActivity extends AppCompatActivity {

    private RecyclerView recyclerView;
    private RecyclerView.Adapter mAdapter;
    private RecyclerView.LayoutManager layoutManager;
    public ArrayList<Brand> brands;


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

        ApiService api = RetroClient.getApiService();

        Call<Brands> call = api.getBrands();

        call.enqueue(new Callback<Brands>() {
            @Override
            public void onResponse(Call<Brands> call, Response<Brands> response) {
                brands = response.body().getBrands();
                // Log.d("BRANDS", new Gson().toJson(brands));

                RecyclerView recyclerBrands = (RecyclerView) findViewById(R.id.recyclerView);
                RecyclerAdapter adapter = new RecyclerAdapter(brands, RecyclerActivity.this);
                recyclerBrands.setAdapter(adapter);
                recyclerBrands.setLayoutManager(new LinearLayoutManager(RecyclerActivity.this));

                /**
                 * Add listener to every recycler view items
                 */
                recyclerBrands.addOnItemTouchListener(new CustomRVItemTouchListener(RecyclerActivity.this, recyclerBrands, new RecyclerViewItemClickListener() {
                    @Override
                    public void onClick(View view, int position) {
                        Snackbar.make(findViewById(R.id.layoutMain), "onClick at position : " + position, Snackbar.LENGTH_LONG).show();
                    }

                    @Override
                    public void onLongClick(View view, int position) {
                        Snackbar.make(findViewById(R.id.layoutMain), "onLongClick at position : " + position, Snackbar.LENGTH_LONG).show();
                    }
                }));
            }

            @Override
            public void onFailure(Call<Brands> call, Throwable t) {
                Log.d("onFailure", "onFailure: ");
            }
        });
    }
}

и RecyclerAdapter

public class RecyclerAdapter extends RecyclerView.Adapter<BrandHolder> {

    private List<Brand> list = Collections.emptyList();
    private Context context;

    public RecyclerAdapter(List<Brand> list, Context context){
        this.list = list;
        this.context = context;
    }

    // Create new views (invoked by the layout manager)
    @Override
    public BrandHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        // create a new view
        View view = LayoutInflater.from(
                parent.getContext()).inflate(R.layout.recycler_row_layout, parent, false);

        return new BrandHolder(view);
    }

    // Replace the contents of a view (invoked by the layout manager)
    @Override
    public void onBindViewHolder(BrandHolder holder, int position) {
        holder.txtTitle.setText(list.get(position).getTitle());
        holder.txtPrice.setText(list.get(position).getPrice());
        holder.txtPercent.setText(list.get(position).getPercent());
    }

    // Return the size of your
    @Override
    public int getItemCount() {
        return list.size();
    }

    @Override
    public void onAttachedToRecyclerView(RecyclerView recyclerView) {
        super.onAttachedToRecyclerView(recyclerView);
    }
}
  • Вопрос задан
  • 660 просмотров
Решения вопроса 1
@apr1cot Автор вопроса
Решение моей проблемы, для тех, кто столкнется с такой же проблемой.

public class BrandHolder extends RecyclerView.ViewHolder implements View.OnClickListener{

    public String    id;
    public CardView  cardBrand;
    public TextView  txtTitle;

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

        itemView.setOnClickListener(this);

        //String itView = String.valueOf(itemView);

        cardBrand   = (CardView)  itemView.findViewById(R.id.cardBrand);
        txtTitle    = (TextView)  itemView.findViewById(R.id.txtTitle);
    }

    @Override
    public void onClick(View v) {
        Log.d("ITEM", String.valueOf(this.id));
        Snackbar.make(cardBrand, "onClick at position : " + getLayoutPosition(), Snackbar.LENGTH_LONG).show();
    }
}
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
zagayevskiy
@zagayevskiy Куратор тега Java
Android developer at Yandex
не вижу установления клик листенера в адаптере. Когда он там будет, в него можно захватить конкретный Brand и затем дальше его прокинуть(думаю, id внутри него быть должен).
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы