簡體   English   中英

帶有左右箭頭指示器的水平回收器視圖

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

我正在嘗試使用左右箭頭指示器實現水平回收視圖。 所以會發生什么是如果單擊右箭頭應該出現下一個項目,如果單擊左箭頭應該出現前一個項目,並且在列表的末尾左箭頭應該消失。 我不知道如何實現這一點。 有人可以幫我嗎? 下面是我的 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) ;

    }
}

}

提前致謝。

嘗試以下

這里 img_LeftScroll 是水平列表之間的左圖像視圖, img_right_scroll 是水平列表之間的右圖像視圖, rv_horizo​​ntal 是水平列表視圖

然后單擊圖像視圖執行以下操作,希望它有效

 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM