点击另一个recyclerview的项目后滚动recyclelerview?

时间:2018-02-19 10:09:52

标签: android android-recyclerview recycler-adapter

我想通过点击另一个在弹出菜单中调用的Recyclerview的类别位置来滚动recyclelerview ...下面是我的代码,我正在使用Sectional Recyclerview,我想在点击第二个recyclerview项目时获得节项目位置。 ..请注意,recyclerview项目的类别ID都相同;

CategoryMenuRecyclerview适配器:

public class MyAdapter extends RecyclerView.Adapter<MyAdapter.ViewHolder> {
    private ArrayList<MenuItem.ProductCategory> mDataset;
    private ItemListner itemListner;
    RestaurantMenuActivity mContext;

    public MyAdapter(RestaurantMenuActivity mContext, ArrayList<MenuItem.ProductCategory> productList, ItemListner itemListner) {
        mDataset = productList;
        this.itemListner = itemListner;
        this.mContext = mContext;
    }

    public class ViewHolder extends RecyclerView.ViewHolder {
        // each data item is just a string in this case
        public View mainView;
        TextView tvCategory, tvCategoryNo;

        public ViewHolder(View v) {
            super(v);
            mainView = v;
            tvCategory = (TextView) v.findViewById(R.id.tvCategory);
            tvCategoryNo = (TextView) v.findViewById(R.id.tvCategoryNo);
        }
    }

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

        ViewHolder vh = new ViewHolder(v);
        return vh;
    }

    // Replace the contents of a view (invoked by the layout manager)
    @Override
    public void onBindViewHolder(final ViewHolder holder, final int position) {
        // - get element from your dataset at this position
        // - replace the contents of the view with that element
        holder.tvCategory.setText(mDataset.get(position).getCategoryName());

        holder.mainView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {

                itemListner.Item(position);

            }
        });
    }

    // Return the size of your dataset (invoked by the layout manager)
    @Override
    public int getItemCount() {
        return mDataset.size();
    }
}

我希望在适配器下方滚动上面的recyclerview项目的点击项目;

RestaurantMenuAdapter;

     public class RestaurantMenuAdapter extends SectionedRecyclerViewAdapter<RecyclerView.ViewHolder> {
    private List<MenuItem.ProductCategory> allData;

    public RestaurantMenuAdapter(List<MenuItem.ProductCategory> data) {
        this.allData = data;
    }

    @Override
    public int getSectionCount() {
        return allData == null ? 0 : allData.size();
    }

    private MenuItem.ProductCategory getItem(int position) {
        return allData.get(position);
    }

    @Override
    public int getItemCount(int section) {
        return allData.get(section).getProductDetails() == null ? 0 : allData.get(section).getProductDetails().size();
    }

    @Override
    public void onBindHeaderViewHolder(RecyclerView.ViewHolder holder, int section) {
        String sectionName = allData.get(section).getCategoryName();
        SectionViewHolder sectionViewHolder = (SectionViewHolder) holder;
        sectionViewHolder.tvCategory.setText(sectionName);
    }

    @Override
    public void onBindViewHolder(RecyclerView.ViewHolder holder, final int section, final int relativePosition, int absolutePosition) {
        final ItemViewHolder itemViewHolder = (ItemViewHolder) holder;
        itemViewHolder.tvProductName.setText(allData.get(section).getProductDetails().get(relativePosition).getProductName());
        itemViewHolder.tvDescription.setText("Grass Fed Beef with creespy bacon, tasty cheese, salad, relish and hot");
        itemViewHolder.tvPrice.setText("$ " + allData.get(section).getProductDetails().get(relativePosition).getCurrentPrice());

        if (near_by_restaurant) {
            rlAddCart.setVisibility(View.VISIBLE);
            if (tvCategoryCount.getText().toString().matches("0")) {
                rlAddCart.setVisibility(View.GONE);
            } else {
                rlAddCart.setVisibility(View.VISIBLE);
            }

            if (allData.get(section).getProductDetails().get(relativePosition).getIsOpen().equalsIgnoreCase("1")) {
                itemViewHolder.ll_product.setAlpha(0.5f);

                itemViewHolder.ll_product.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View view) {
                        new AlertDialog.Builder(RestaurantMenuActivity.this)
                                .setMessage("Sorry kitchen is closed")
                                .setPositiveButton("Ok", new DialogInterface.OnClickListener() {
                                    public void onClick(DialogInterface dialog, int which) {
                                        dialog.dismiss();
                                    }
                                })
                                .show();
                    }
                });
            } else if (allData.get(section).getProductDetails().get(relativePosition).getIsSoldout().equalsIgnoreCase("1")) {
                itemViewHolder.tvSoldOut.setVisibility(View.VISIBLE);
                itemViewHolder.ll_product.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View view) {
                        new AlertDialog.Builder(RestaurantMenuActivity.this)
                                .setMessage("Sorry all items are sold out")
                                .setPositiveButton("Ok", new DialogInterface.OnClickListener() {
                                    public void onClick(DialogInterface dialog, int which) {
                                        // Your code

                                        dialog.dismiss();
                                    }
                                })
                                .show();
                    }
                });

            } else {
                itemViewHolder.tvSoldOut.setVisibility(View.GONE);
                itemViewHolder.ll_product.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View view) {

                        SharedPreferences sharedPref = getSharedPreferences("cartitems", 0);
                        String strJson = sharedPref.getString("cartdata", "0");

                        try {
                            mainjsonArray = new JSONArray(strJson);
                        } catch (JSONException e) {
                            e.printStackTrace();
                        }

                        Intent i = new Intent(RestaurantMenuActivity.this, ProductCartActivity.class);
                        i.putExtra("product_id", allData.get(section).getProductDetails().get(relativePosition).getProductID());
                        i.putExtra("productCart", true);
                        i.putExtra("product_name", allData.get(section).getProductDetails().get(relativePosition).getProductName());
                        i.putExtra("product_price", allData.get(section).getProductDetails().get(relativePosition).getCurrentPrice());
                        try {
                            i.putExtra("jsonArray", mainjsonArray.toString());
                        } catch (Exception e) {
                            e.printStackTrace();
                        }


                        startActivityForResult(i, PRODUCT_CART);
                    }
                });
            }
        } else {
            rlAddCart.setVisibility(View.GONE);
            itemViewHolder.ll_product.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    new AlertDialog.Builder(RestaurantMenuActivity.this)
                            .setMessage("Sorry you are not in restaurant")
                            .setPositiveButton("Ok", new DialogInterface.OnClickListener() {
                                public void onClick(DialogInterface dialog, int which) {
                                    // Your code

                                    dialog.dismiss();
                                }
                            })
                            .show();
                }
            });

        }

        if (allData.get(section).getProductDetails().get(relativePosition).getFavorited() == 0) {
            itemViewHolder.ivFav.setImageResource(R.drawable.fav_02);
        } else {
            itemViewHolder.ivFav.setImageResource(R.drawable.favroite_highlited);
        }

        itemViewHolder.ivFav.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {

                final ProgressDialog pd = ProgressDialog.show(RestaurantMenuActivity.this, "", "Loading...");
                JSONObject postdata = new JSONObject();
                try {
                    YupITApplication.getJsonWithHTTPPost(RestaurantMenuActivity.this, 1, new ServiceCallBack() {
                        @Override
                        public void serviceCallback(int id, JSONObject jsonResult) {
                            pd.dismiss();
                            try {
                                if (jsonResult.has("Data") && !jsonResult.getString("Data").equals("")) {
//                                        {"Status":"Success","StatusCode":"200","Message":"Item Favourited!","Data":[]}

                                    if (jsonResult.getString("Message").equalsIgnoreCase("Item Favourited!")) {
                                        itemViewHolder.ivFav.setImageResource(R.drawable.favroite_highlited);
                                    } else {
                                        itemViewHolder.ivFav.setImageResource(R.drawable.fav_02);
                                    }
                                    Toast.makeText(getApplicationContext(), jsonResult.getString("Message"), Toast.LENGTH_SHORT).show();
                                }
                            } catch (JSONException e) {
                                e.printStackTrace();
                            }
                        }
                    }, Utils.insertfavoriteitem + "&productid=" + allData.get(section).getProductDetails().get(relativePosition).getProductID() + "&userid=" + customer_id, postdata);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });

        Glide.with(RestaurantMenuActivity.this).load(allData.get(section).getProductDetails().get(relativePosition).getPhotoImagePath())
                .thumbnail(0.5f)
                .crossFade()
                .diskCacheStrategy(DiskCacheStrategy.ALL)
                .into(itemViewHolder.ivMenu);
    }

    @Override
    public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, boolean header) {
        View v = null;
        if (header) {
            v = LayoutInflater.from(parent.getContext())
                    .inflate(R.layout.list_item_section, parent, false);

            v.measure(View.MeasureSpec.UNSPECIFIED, View.MeasureSpec.UNSPECIFIED);
            width = v.getMeasuredWidth();
            height = v.getMeasuredHeight();

            return new SectionViewHolder(v);
        } else {
            v = LayoutInflater.from(parent.getContext())
                    .inflate(R.layout.list_item, parent, false);
            return new ItemViewHolder(v);
        }

    }

    // SectionViewHolder Class for Sections
    public class SectionViewHolder extends RecyclerView.ViewHolder {
        final TextView tvCategory;

        public SectionViewHolder(View itemView) {
            super(itemView);
            tvCategory = (TextView) itemView.findViewById(R.id.tvCategory);
        }
    }

    // ItemViewHolder Class for Items in each Section
    public class ItemViewHolder extends RecyclerView.ViewHolder {
        final TextView tvProductName, tvDescription, tvPrice, tvSoldOut;
        LinearLayout ll_product;
        ImageView ivMenu, ivFav;

        public ItemViewHolder(View itemView) {
            super(itemView);
            tvProductName = (TextView) itemView.findViewById(R.id.tvProductName);
            tvDescription = (TextView) itemView.findViewById(R.id.tvDescription);
            tvPrice = (TextView) itemView.findViewById(R.id.tvPrice);
            ivMenu = (ImageView) itemView.findViewById(R.id.ivMenu);
            ll_product = (LinearLayout) itemView.findViewById(R.id.ll_product);
            tvSoldOut = (TextView) itemView.findViewById(R.id.tvSoldOut);
            ivFav = (ImageView) itemView.findViewById(R.id.ivFav);
        }
    }


    public int isSectionHeaderPosition(int position) {
        return Integer.parseInt(allData.get(position).getCategoryID());
    }

}

请帮忙

1 个答案:

答案 0 :(得分:1)

我认为弹出式菜单中类别的位置与第二个recyclerView的部分值相同如果通过监听项目获得活动中被点击项目的位置,则可以使用单击滚动recyclelerView LayoutManager。

recyclerView.getLayoutManager().scrollToPosition(youPositionInTheAdapter).