tamerlan676
@tamerlan676
Развиваюсь в интернет-торговле

Как сделать переход к нужному элементу списка RecyclerView?

Здравствуйте! Я делаю простое приложение из двух активностей.
Первая это список продуктов, вторая это внутренняя страница товара, в которой я буду что-то делать.
Вся информация у меня хранится в базе данных.
Проблема в том, что при клике на любой из элементов я попадаю на первый продукт.
Вот мой код адаптера
class ProductsAdapter extends RecyclerView.Adapter<ProductsAdapter.ViewHolder>{

    private Listener listener;


    public static interface Listener {
        public void onClick(int position);
    }


    private List<Product> products = Collections.emptyList();

    public ProductsAdapter(){
    }


    // Метод передает продукты в адаптер
    public void setProducts(List<Product> products ) {
        this.products = products;
        notifyDataSetChanged();

    }


    //Предоставляет ссылку на представления, используемые в RecyclerView
    public static class ViewHolder extends RecyclerView.ViewHolder {
        private TextView productName, apparatCount, factCount, stockCount;

        public ViewHolder(CardView v) {
            super(v);
            productName = v.findViewById(R.id.productName);
            apparatCount = v.findViewById(R.id.apparatCount);
            factCount = v.findViewById(R.id.factAppCount);
            stockCount = v.findViewById(R.id.stockCount);


        }
        //Определение класса ViewHolder
    }



    public void setListener(Listener listener){
        this.listener = listener;
    }

    @Override
    public ProductsAdapter.ViewHolder onCreateViewHolder(
            ViewGroup parent, int viewType){

        CardView cv = (CardView) LayoutInflater.from(parent.getContext())
                .inflate(R.layout.product_card, parent, false);
        return new ViewHolder(cv);

        //Создание нового представления
    }

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

        final Product product = products.get(position);
        holder.productName.setText(product.getProduct_name());
        holder.apparatCount.setText(String.valueOf(product.getPositions()));
        holder.stockCount.setText(String.valueOf(product.getStock()));
        View cardView = holder.itemView;

        cardView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if (listener != null) {
                    listener.onClick(position);
                }
            }
        });



    }
    @Override
    public int getItemCount(){
        //Возвращает количество вариантов в наборе данных
        return products.size();

    }
}


Вот код MainActivity
public class MainActivity extends AppCompatActivity {

    //Объявим переменные компонентов
    private ApparatDatabaseHelper dbHelper = new ApparatDatabaseHelper(this);

    //Переменная для работы с БД
    private ProductsAdapter productsAdapter = new ProductsAdapter();


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


        RecyclerView recyclerView = (RecyclerView) findViewById(R.id.products_rec);
        recyclerView.setAdapter(productsAdapter);

        RecyclerView.LayoutManager layoutManager = new LinearLayoutManager(this, RecyclerView.VERTICAL, false);
        recyclerView.setLayoutManager(layoutManager);

        productsAdapter.setListener(new ProductsAdapter.Listener() {
            public void onClick(int position) {
                Intent intent = new Intent(MainActivity.this, InnerActivity.class);
                intent.putExtra(InnerActivity.EXTRA_PRODUCT, position);
                startActivity(intent);
            }
        });


        SQLiteDatabase db = dbHelper.getReadableDatabase();

        Cursor cursor = db.query("products", null, null, null, null, null, null);
        List<Product> products = new ArrayList<>();
        while(cursor.moveToNext()) {
            Product product = new Product();
            product.setProduct_name(cursor.getString(1));
            product.setPositions(cursor.getInt(2));
            product.setFact(cursor.getInt(3));
            product.setStock(cursor.getInt(4));

            products.add(product);
        }

        cursor.close();


        productsAdapter.setProducts(products);
    }
}

И вот код внутренней страница товара
public class InnerActivity extends AppCompatActivity {

    private ApparatDatabaseHelper dbHelper = new ApparatDatabaseHelper(this);

    private ProductsAdapter productsAdapter = new ProductsAdapter();

    public static final String EXTRA_PRODUCT = "extraProduct";




    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.inner_product);



        Intent intent = getIntent();
        intent.getStringExtra(EXTRA_PRODUCT);





        SQLiteDatabase db = dbHelper.getReadableDatabase();

       final Cursor cursor = db.query ("products",  new String[]{},;


       final List<Product> products = new ArrayList<>();


        if (cursor.moveToFirst()) {

            //Получение данных напитка из курсора
            int id_product = cursor.getInt(0);
            String nameText = cursor.getString(1);
            int position = cursor.getInt(2);
            int factCount = cursor.getInt(3);
            int stockCount = cursor.getInt(4);


            TextView name = (TextView) findViewById(R.id.productName);
            name.setText(nameText);

            TextView pos = (TextView) findViewById(R.id.posCount);
            pos.setText(String.valueOf(position));

            TextView fact = (TextView) findViewById(R.id.factAppCount);
            fact.setText(String.valueOf(factCount));

            TextView stock = (TextView) findViewById(R.id.stockCount);
            stock.setText(String.valueOf(stockCount));

        }

        cursor.close();
        }

Я подозреваю, что вместо position мне нужно получать id товара. Но я не знаю как мне изменить адаптер. Помогите пожалуйста.
  • Вопрос задан
  • 145 просмотров
Решения вопроса 1
@davidnum95
ProductsAdapter
public static interface Listener {
        public void onClick(int id);
    }

cardView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if (listener != null) {
                    listener.onClick(product.id);
                }
            }
        });

MainActivity
productsAdapter.setListener(new ProductsAdapter.Listener() {
            public void onClick(int id) {
                Intent intent = new Intent(MainActivity.this, InnerActivity.class);
                intent.putExtra(InnerActivity.EXTRA_PRODUCT, id);
                startActivity(intent);
            }
        });

InnerActivity
final Cursor cursor = db.query ("products", null, "id = ?", new String[] { id }, null, null, null);
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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