web-dev-qa-db-ja.com

RecyclerViewでアイテムの正確な数を表示するにはどうすればよいですか?

RecyclerViewで正確な(例:3アイテム)を表示しようとしています。 Webアプリケーションは次のように表示されます。

enter image description here

アイテムを移動した場合:

enter image description here

マウスを離すと、自動的に次のようになります: enter image description here

Androidでは、RecyclerViewを使用して画像を表示しています。

enter image description here

RecyclerViewの可視領域に正確に3つのアイテムを表示するにはどうすればよいですか? 「半分」のアイテムを表示しないようにするにはどうすればよいですか?これは可能ですか?

RecyclerView:

        <Android.support.v7.widget.RecyclerView
            Android:layout_width="wrap_content"
            Android:layout_height="130dp"
            Android:id="@+id/rvProducts" />

リサイクル業者ビューの1つのアイテム:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
    Android:orientation="vertical" Android:layout_width="match_parent"
    Android:layout_height="match_parent">

    <ImageView
        Android:layout_width="100dp"
        Android:layout_height="wrap_content"
        Android:padding="10dp"
        Android:id="@+id/ivProduct"
        Android:src="@drawable/noimage"/>

</LinearLayout>

コード:

    LinearLayoutManager layoutManager
            = new LinearLayoutManager(getActivity(), LinearLayoutManager.HORIZONTAL, false);
    RecyclerView productImageList = (RecyclerView) view.findViewById(R.id.rvProducts);
    productImageList.setLayoutManager(layoutManager);
    GalleryRecyclerAdapter adapter = new GalleryRecyclerAdapter(images);
    productImageList.setAdapter(adapter);
16
Joe Richard

1つの解決策は、各子のwidthをプログラムで設定することです。

view.getLayoutParams().width = getScreenWidth() / VIEWS_COUNT_TO_DISPLAY;

そして、このような画面サイズ:

DisplayMetrics metrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(metrics).widthPixels;
15
Prokky

私は次のアプローチとして上記のタスクを実行しました、次のコードを参照してください

私のonCreateViewHolder()私のメソッド_RecycleView Adapter_の場合、画面の幅がわかり、次に分割されますセクション。一度確認してください。

_@Override
    public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View itemView = LayoutInflater.from(parent.getContext())
                .inflate(R.layout.MY_ITEM_TO_INFALTE, parent, false);

        itemView.getLayoutParams().width = (int) (getScreenWidth() / NUMBERS_OF_ITEM_TO_DISPLAY); /// THIS LINE WILL DIVIDE OUR VIEW INTO NUMBERS OF PARTS

        return new MyCreationItemAdapter.MyViewHolder(itemView);
    }
_

上記のコードからgetScreenWidth()上記で使用するメソッドは次のとおりですので、確認してください。

_public int getScreenWidth() {

        WindowManager wm = (WindowManager) activity.getSystemService(Context.WINDOW_SERVICE);
        Display display = wm.getDefaultDisplay();
        Point size = new Point();
        display.getSize(size);

        return size.x;
    }
_
11

これを達成する一般的な方法では、リサイクラービューに付随する単純なプロパティはありません。

これを実現する方法は、親の幅をアダプターに送信することです。

スェード的に….

    Parent width = parent container width;

    InitialiseRecyclerAdapter(parent width) {
         on create view holder {
                 Set the width of ur item layout with a width that divides ur parent width in equal parts;
          }
}
2

この解決策は私にとってうまくいきました:

 private lateinit var productImageList: RecyclerView

 override fun onAttachedToRecyclerView(recyclerView: RecyclerView) 
  {
       super.onAttachedToRecyclerView(recyclerView)

        productImageList = recyclerView
  }

 override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ProductViewHolder {
        val viewHolder = LayoutInflater.from(parent.context).inflate(R.layout.ITEM_TO_INFALTE, parent, false)

        viewHolder.layoutParams.width = productImageList.measuredWidth / NUMBERS_OF_ITEM_TO_DISPLAY

        return ProductViewHolder(viewHolder)
    }

コードはコトリンにあります、それがあなたを助けることを願っています。

0
Fisnik Ibishi