【问题标题】:Horizontal RecycleView Item click scroll to first item水平 RecyclerView 项目单击滚动到第一项
【发布时间】:2018-02-10 13:06:23
【问题描述】:

大家好,我遇到了水平回收视图的问题,如果我向右滚动然后单击任何项​​目然后它会自动滚动到左侧的第一个项目,基本上我必须停留在当前单击的位置不滚动开始左,我使用堆栈中的多个东西,但它们都不像scrolltopostion那样工作,创建自定义布局管理器类!请帮忙 以下是我的代码:

  private void setAdapter() {
    recyclerView.setHasFixedSize(true);
    mLayoutManager = new LinearLayoutManager(context, LinearLayoutManager.HORIZONTAL, false);
    recyclerView.setLayoutManager(mLayoutManager);
    mainAdapterClass = new MainAdapterClassw(context, AuctionManager.list);
    recyclerView.setAdapter(mainAdapterClass);
}

下面是适配器类:

    public class MainAdapterClassw extends RecyclerView.Adapter<MainAdapterClassw.ViewHolder> {
    ArrayList<AuctionBean> list;
    Context context;
    public MainAdapterClassw(Context context, ArrayList<AuctionBean> list) {
        super();
        this.context = context;
        this.list = list;
    }
    @Override
    public ViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) {
        View v = LayoutInflater.from(viewGroup.getContext())
                .inflate(R.layout.customelayout, viewGroup, false);
        ViewHolder viewHolder = new ViewHolder(v);

        return viewHolder;
    }

    @Override
    public void onBindViewHolder(ViewHolder viewHolder, int i) {

        auctionBean = list.get(i);
        viewHolder.top_sr_no.setText(auctionBean.getAuction_id());
        viewHolder.view2.setVisibility(View.GONE);
        viewHolder.itemView.setSelected(selectedPos == i);

        viewHolder.bottom_sr_no.setText(auctionBean.getReserve_price());

            text_qantity.setText(qantity1);
            Picasso.with(context)
                    .load("http://traala.com/Bidding/images/date.png")
                    .placeholder(R.mipmap.ic_launcher)
                    .into(productimage);

        }
        viewHolder.setClickListener(new ItemClickListener() {
            @Override
            public void onClick(View view, int position, boolean isLongClick) {
                AuctionBean auctionBean1 = list.get(position);
                Log.d("LogPosition",position+"");

                if (countDownTimer != null) {

                    countDownTimer.cancel();
                }

                    CSPreferences.putString(context, "auction_id", auctionBean1.getAuction_id());
                    ModelManager.getInstance().getAuctionManager().AuctionManager(context, Operations.getallAcuntion(context,
                            ActionString.getall_auctions, "101", auctionBean1.getAuction_id()));


            }
        });

        switch (auctionBean.getAuction_status()) {
            case "status_active.png":
                viewHolder.imgThumbnail.setImageResource(R.drawable.status_active);
                break;
            case "status_pending.png":
                viewHolder.imgThumbnail.setImageResource(status_pending);
                break;
            case "status_over.png":
                viewHolder.imgThumbnail.setImageResource(R.drawable.ic_icon_auction_red);
                break;


        }
    }


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

    public class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener, View.OnLongClickListener {

        public ImageView imgThumbnail;
        public TextView top_sr_no;
        public TextView bottom_sr_no;
        View view2;
        private ItemClickListener clickListener;

        public ViewHolder(View itemView) {
            super(itemView);
            imgThumbnail = (ImageView) itemView.findViewById(R.id.imageview);
            top_sr_no = (TextView) itemView.findViewById(R.id.textsrno);
            bottom_sr_no = (TextView) itemView.findViewById(R.id.textbottom_srno);
            view2 = (View) itemView.findViewById(R.id.view1);
            itemView.setOnClickListener(this);
            itemView.setOnLongClickListener(this);

        }

        public void setClickListener(ItemClickListener itemClickListener) {
            this.clickListener = itemClickListener;

        }

        @Override
        public void onClick(View view)   {
            clickListener.onClick(view, getAdapterPosition(), false);
            adapterpostion =getAdapterPosition();
            auctionstatus =auctionList.get(getAdapterPosition());

        }

        @Override
        public boolean onLongClick(View view) {
            clickListener.onClick(view, getPosition(), true);
            return true;
        }
    }

}
}

【问题讨论】:

  • 在你放置Recyclerview的xml布局文件中添加android:descendantFocusability="blocksDescendants"这个属性。
  • 在 xml 的父布局中?
  • 是的,就像你的回收站视图在 LineareLayout 中,然后在 LinearLayout 中添加该属性
  • 未解决 :( !!!
  • 我很确定你有多个听众的问题。尝试只留下.setOnClickListener 的一项作业。 ItemClickListener 类有什么作用?

标签: android android-recyclerview


【解决方案1】:

请将此属性添加到您的 xml 文件中的父布局中

android:descendantFocusability="blocksDescendants"

在 RecyclerView 中设置适配器如下:

private void setAdapter() {
    recyclerView.setHasFixedSize(true);
    mLayoutManager = new LinearLayoutManager(context, LinearLayoutManager.HORIZONTAL, false);
    recyclerView.setLayoutManager(mLayoutManager);
    recyclerView.setNestedScrollingEnabled(false);
    recyclerView.setHasFixedSize(true);
    mainAdapterClass = new MainAdapterClassw(context, AuctionManager.list);
    recyclerView.setAdapter(mainAdapterClass);
}

【讨论】:

    【解决方案2】:

    在我的情况下,这是因为EditText 中的gravity 属性而发生的,就像:android:gravity="center",因此删除此属性解决了问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-28
      • 2020-06-18
      • 1970-01-01
      • 2017-05-02
      • 1970-01-01
      相关资源
      最近更新 更多