简体   繁体   English

带有左右箭头指示器的水平回收器视图

[英]Horizontal Recycler view with left and right arrow Indicators

I am trying to implement a horizontal recycleview with right and left arrow indicators.我正在尝试使用左右箭头指示器实现水平回收视图。 So what happens is if one clicks the right arrow next item should appear and if one clicks the left arrow the previous item should appear and also at the end of the list the left arrow should disappear.所以会发生什么是如果单击右箭头应该出现下一个项目,如果单击左箭头应该出现前一个项目,并且在列表的末尾左箭头应该消失。 I have no Idea how ti implement this.我不知道如何实现这一点。 can someone help me out?有人可以帮我吗? Below is my Horizontal Recyclerview adapter.下面是我的 Horizo​​ntal Recyclerview 适配器。

public class DialogRecyclerViewAdapter extends RecyclerView.Adapter<DialogRecyclerViewAdapter.ViewHolder> {

Context context;

List<UploadImage> dataAdapters;
private SharedPreferences.Editor mSharedPrefEditor;

ImageLoader imageLoader;

public DialogRecyclerViewAdapter(List<UploadImage> getDataAdapter, Context context){

    super();
    this.dataAdapters = getDataAdapter;
    this.context = context;
}

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

    View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.cardview, parent, false);

    ViewHolder viewHolder = new ViewHolder(view);

    return viewHolder;
}

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

    final UploadImage dataAdapterOBJ =  dataAdapters.get(position);

    imageLoader = ImageAdapter.getInstance(context).getImageLoader();

    imageLoader.get(dataAdapterOBJ.getImage(),
            ImageLoader.getImageListener(
                    Viewholder.VollyImageView,//Server Image
                    R.drawable.loading_1,//Before loading server image the default showing image.
                    android.R.drawable.ic_dialog_alert //Error image if requested image dose not found on server.
            )
    );

    Viewholder.VollyImageView.setImageUrl(dataAdapterOBJ.getImage(), imageLoader);

    Viewholder.ImageTitleTextView.setText(dataAdapterOBJ.getBrand_name());

    Viewholder.garment_price.setText(dataAdapterOBJ.getGarment_price());


    Viewholder.VollyImageView.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {

            SharedPreferences sharedPref = PreferenceManager.getDefaultSharedPreferences(MihuChatApplication.getInstance().getContext());
            mSharedPrefEditor = sharedPref.edit();
            mSharedPrefEditor.putString(Constants.KEY_FROM_CHAT, "fromChatWIndow").apply();


            Intent i=new Intent(MihuChatApplication.getInstance().getContext(), DetailsNewActivity.class);
            i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

            //PACK DATA TO SEND
            i.putExtra("image_title",dataAdapterOBJ.getGarment_name());

            i.putExtra("image_url",dataAdapterOBJ.getImage_full());
            i.putExtra("desc_text", dataAdapterOBJ.getDesc_text());
            //i.putExtra("image_url2", imageLarger);

            i.putExtra("image_price", dataAdapterOBJ.getGarment_price());
            //i.putExtra("disc_price", disc_price);
            //open activity
            MihuChatApplication.getInstance().getApplicationContext().startActivity(i);
        }
    });

}

@Override
public int getItemCount() {

    return dataAdapters.size();
}

class ViewHolder extends RecyclerView.ViewHolder{

    public TextView ImageTitleTextView, garment_price;
    public NetworkImageView VollyImageView ;

    public ViewHolder(View itemView) {

        super(itemView);

        garment_price = (TextView) itemView.findViewById(R.id.garment_price);

        ImageTitleTextView = (TextView) itemView.findViewById(R.id.ImageNameTextView) ;

        VollyImageView = (NetworkImageView) itemView.findViewById(R.id.VolleyImageView) ;

    }
}

} }

Thanks in advance.提前致谢。

Try the following尝试以下

here img_LeftScroll is the left imageview and img_right_scroll is the right imageview between the horizontal list, rv_horizontal is the horizontallist view这里 img_LeftScroll 是水平列表之间的左图像视图, img_right_scroll 是水平列表之间的右图像视图, rv_horizo​​ntal 是水平列表视图

then onclick of the image view do the below, hope it works然后单击图像视图执行以下操作,希望它有效

 img_LeftScroll.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            if (horizontalLayoutManagaer.findFirstVisibleItemPosition() > 0) {
                rv_horizontal.smoothScrollToPosition(horizontalLayoutManagaer.findFirstVisibleItemPosition() - 1);
            } else {
                rv_horizontal.smoothScrollToPosition(0);
            }

        }
    });

 img_right_scroll.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            rv_horizontal.smoothScrollToPosition(horizontalLayoutManagaer.findLastVisibleItemPosition() + 1);
        }
    });

Horizontal Recycler view with left and right arrow Indicators --I have Done this By creating a custom Layout with recyclerVIew and two arrow images --带有左右箭头指示器的水平回收器视图--我通过使用 recyclerVIew 和两个箭头图像创建自定义布局来完成此操作-

recyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() {
        @Override
        public void onScrollStateChanged(RecyclerView recyclerView, int newState) {
            super.onScrollStateChanged(recyclerView, newState);
            switch (newState) {
                case SCROLL_STATE_DRAGGING:
                    //Indicated that user scrolled.
                    programaticallyScrolled = false;
                    break;
                case SCROLL_STATE_IDLE:
                    if (!programaticallyScrolled) {
                        currentVisibleItem = linearLayoutManager.findFirstCompletelyVisibleItemPosition();
                        handleWritingViewNavigationArrows(false);
                    }
                    break;
                default:
                    break;
            }
        }
    });

Hide/Show navigation arrows隐藏/显示导航箭头

 /**
 * Handles the arrows visibility based on current visible items and scrolls the
 * current visibility item based on param scroll.
 *
 * Scroll - is False if User scrolls the Reycler Manually
 *        - is True means User used arrows to navigate
 *
 * @param scroll
 */
private void handleWritingViewNavigationArrows(boolean scroll) {
    if (currentVisibleItem == (recyclerView.getAdapter().getItemCount() - 1)) {
        rightArrow.setVisibility(View.GONE);
        leftArrow.setVisibility(View.VISIBLE);
    } else if (currentVisibleItem != 0) {
        rightArrow.setVisibility(View.VISIBLE);
        leftArrow.setVisibility(View.VISIBLE);
    } else if (currentVisibleItem == 0) {
        leftArrow.setVisibility(View.GONE);
        rightArrow.setVisibility(View.VISIBLE);
    }
    if (scroll) {
        recyclerView.smoothScrollToPosition(currentVisibleItem);
    }
}

Check the example for the reference hope it helps u检查参考示例希望它对你有帮助

https://github.com/RameshBhupathi/RecyclerViewWithLeftAndRightArrowsExample https://github.com/RameshBhupathi/RecyclerViewWithLeftAndRightArrowsExample

This code works in my case:此代码适用于我的情况:

btn_to_right.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        p = linearLayoutManager.findFirstVisibleItemPosition() - 1;
        recyclerview.smoothScrollToPosition( p);
        checkVisibility();
    }
});


btn_to_left.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        p = linearLayoutManager.findLastVisibleItemPosition() + 1;
        recyclerview.smoothScrollToPosition(p);
        checkVisibility();
    }
});


public void checkVisibility() {
    if (p < 1) {
        btn_to_right.setVisibility(View.GONE);
        btn_to_left.setVisibility(View.VISIBLE);
    } else if (p >= (recyclerview.getAdapter().getItemCount() - 1)) {
        btn_to_right.setVisibility(View.VISIBLE);
        btn_to_left.setVisibility(View.GONE);
    } else {
        btn_to_right.setVisibility(View.VISIBLE);
        btn_to_left.setVisibility(View.VISIBLE);
    }
}

Much simpler approach for hiding/showing arrows:隐藏/显示箭头更简单的方法:

recyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() {
        @Override
        public void onScrollStateChanged(@NonNull RecyclerView recyclerView, int newState) {
            super.onScrollStateChanged(recyclerView, newState);


            if (manager.findFirstCompletelyVisibleItemPosition()==0){
                leftArrow.setVisibility(View.INVISIBLE);
            }else{
                leftArrow.setVisibility(View.VISIBLE);
            }

            if (manager.findLastCompletelyVisibleItemPosition()==list.size()-1){
                rightArrow.setVisibility(View.INVISIBLE);
            }else
                rightArrow.setVisibility(View.VISIBLE);
        }

        @Override
        public void onScrolled(@NonNull RecyclerView recyclerView, int dx, int dy) {
            super.onScrolled(recyclerView, dx, dy);
        }
    });

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM