[英]Horizontal Recycler view with left and right arrow Indicators
我正在嘗試使用左右箭頭指示器實現水平回收視圖。 所以會發生什么是如果單擊右箭頭應該出現下一個項目,如果單擊左箭頭應該出現前一個項目,並且在列表的末尾左箭頭應該消失。 我不知道如何實現這一點。 有人可以幫我嗎? 下面是我的 Horizontal 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) ;
}
}
}
提前致謝。
嘗試以下
這里 img_LeftScroll 是水平列表之間的左圖像視圖, img_right_scroll 是水平列表之間的右圖像視圖, rv_horizontal 是水平列表視圖
然后單擊圖像視圖執行以下操作,希望它有效
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);
}
});
帶有左右箭頭指示器的水平回收器視圖--我通過使用 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;
}
}
});
隱藏/顯示導航箭頭
/**
* 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);
}
}
檢查參考示例希望它對你有幫助
https://github.com/RameshBhupathi/RecyclerViewWithLeftAndRightArrowsExample
此代碼適用於我的情況:
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);
}
}
隱藏/顯示箭頭更簡單的方法:
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.