标签: gridlayoutmanager

SpanGroupIndex和SpanIndex Recycler View

我正在查看GridLayoutManager的文档及其RecyclerView的SpanSizeLookUp类.但我无法了解SpanSizeLookUp类的getSpanGroupIndex和getSpanIndex方法.我还通过覆盖和返回任意数字(小于跨度计数)进行实验.但我不知道它用于什么.

我无法理解文档说明.我想清楚这一点.

android gridlayoutmanager android-recyclerview

3
推荐指数
1
解决办法
1306
查看次数

为GridLayoutManager设置完整范围

我必须创建一个异构的RecyclerView.默认列数为2,但某些项目需要全宽.我这样使用它StaggeredGridLayoutManager是这样的:

    @Override
    public void onBindViewHolder(final RecyclerView.ViewHolder holder, int position) {
        int viewType = getItemViewType(position);
        FeedItems currentItem = getItem(position);
        StaggeredGridLayoutManager.LayoutParams layoutParams = (StaggeredGridLayoutManager.LayoutParams) holder.itemView.getLayoutParams();
        switch (viewType) {
            case ITEM_TYPE_HEADER:
                final HeaderItem headerItem = currentItem.getHeaderItem();
                layoutParams.setFullSpan(true);
        }
    }
Run Code Online (Sandbox Code Playgroud)

我如何为GridLayoutManager做同样的事情,我可以根据不同的视图类型轻松切换范围?

android gridlayoutmanager android-recyclerview

3
推荐指数
1
解决办法
1229
查看次数

RecyclerView + GridLayoutManager:调整项目大小以适合屏幕并保留比例

我正在尝试使用RecyclerView和GridLayoutManager来显示项目列表。

这是我要满足的条件:

  • 每行都有一些由 spanCount
  • 每个项目占据屏幕的相等部分,并且它们一起占满整个屏幕。
  • 物品的高度取决于其宽度和指定的比例。

我发现如果android:layout_width="match_parent"在项目视图上进行设置,则项目宽度将通过用RecyclerView的宽度除以来设置spanCount

问题是我不知道使项目高度与布局管理器确定的宽度成正比。

我唯一的解决方案是放弃布局管理器进行度量,并在中明确设置项目尺寸onBindViewHolder

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

    ViewGroup.LayoutParams p = v.getLayoutParams();

    p.width = parent.getWidth() / mLayoutManager.getSpanCount();
    p.height = p.width * 3/2;

    v.setLayoutParams(p);

    return new MyViewHolder(v);
}
Run Code Online (Sandbox Code Playgroud)

我将不胜感激任何能帮助我改善解决方案的指针。

android gridlayoutmanager android-recyclerview

3
推荐指数
1
解决办法
2312
查看次数

RecyclerView的GridLayoutManager动态跨度计数

我正在使用以下代码动态更改跨度计数。

val layoutManager = GridLayoutManager(this, 3)
layoutManager.spanSizeLookup = object : GridLayoutManager.SpanSizeLookup() {
    override fun getSpanSize(position: Int): Int {
        when (position) {
            0, 1, 2 -> return 1
            3, 4 -> return 2
            5 -> return 3
            else -> return 1
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我得到了以下输出。但是我希望D和E在水平方向上对齐。我不怎么做。

实际上,我在适配器中有3种类型:HEADER,TYPE_A,TYPE_BHEADER应该只有一行,TYPE_A是3行,TYPE_B是2行。

因此,请允许我获得帮助,以使某些列应具有1个1行,而某些列仅具有2行(水平均等对齐),而另一些则具有3行。

在此处输入图片说明

android gridlayoutmanager android-recyclerview

3
推荐指数
1
解决办法
2571
查看次数

如何在屏幕旋转时保持 recyclerView 的滚动位置

我正在用 gridlayoutManager 填充 recyclerView。现在我想在屏幕旋转上保存滚动位置。

我尝试使用 onSaveInstanceState 和 onRestoreInstanceState() 这样做,如本文所示:

如何使用 RecyclerView.State 保存 RecyclerView 的滚动位置?

下面是我的代码:

@Override
protected void onSaveInstanceState(Bundle outState) {
    Log.e(TAG, "onSaveInstanceState");
    super.onSaveInstanceState(outState);
    outState.putParcelable(KEY_INSTANCE_STATE_RV_POSITION, 
    gridLayoutManager.onSaveInstanceState());
 }


@Override
protected void onRestoreInstanceState(Bundle savedInstanceState) {

    Log.e(TAG, "onRestoreInstanceState");
    super.onRestoreInstanceState(savedInstanceState);
    if (savedInstanceState!= null){
        Parcelable savedState = 
    savedInstanceState.getParcelable(KEY_INSTANCE_STATE_RV_POSITION);

        movieAdapter.addAll(movieItemList);
        if (savedState!= null){
            gridLayoutManager.onRestoreInstanceState(savedState);
        }
    }
}


//this is my movieAdapter.addAll() method 

public void addAll(List<MovieItem>items){

    movieItems = items;
}


//This is the method to get lists of movies from ViewModel Class

private void loadFavMovies() {
    FavViewModel …
Run Code Online (Sandbox Code Playgroud)

android gridlayoutmanager android-recyclerview

3
推荐指数
3
解决办法
3913
查看次数

在 Recycler GridLayoutManager 中为 3 和 4 行项目提供更多间距

我使用 RecyclerView 和 GridLayoutManager 作为巴士票预订的布局。一切正常,但除了我坚持使用逻辑的地方,我必须使用这些逻辑在所有行中的 3 和 4 列项目之间留出更多间距。基本上我的布局应该像下面所附的屏幕截图。

我的要求:

在此处输入图片说明

电流输出:

在此处输入图片说明

我还发布了我完整的 RecyclerView GridLayoutManager 供您参考,如下所示

MultiSelectRecyclerViewAdapter.java

public class MultiSelectRecyclerViewAdapter extends SelectableAdapter<MultiSelectRecyclerViewAdapter.ViewHolder> {

    private ArrayList<String> mArrayList;
    private Context mContext;
    private ViewHolder.ClickListener clickListener;



    public MultiSelectRecyclerViewAdapter (Context context, ArrayList<String> arrayList,ViewHolder.ClickListener clickListener) {
        this.mArrayList = arrayList;
        this.mContext = context;
        this.clickListener = clickListener;

    }

    // Create new views
    @Override
    public MultiSelectRecyclerViewAdapter.ViewHolder onCreateViewHolder(ViewGroup parent,
                                                             int viewType) {

        View itemLayoutView = LayoutInflater.from(parent.getContext()).inflate(
                R.layout.row_multiselect, null);

        ViewHolder viewHolder = new ViewHolder(itemLayoutView,clickListener);

        return viewHolder;
    }

    @Override
    public void onBindViewHolder(ViewHolder viewHolder, …
Run Code Online (Sandbox Code Playgroud)

android android-custom-view gridlayoutmanager android-recyclerview

2
推荐指数
1
解决办法
3800
查看次数

GridLayoutManager每行具有不同的列数

我正在尝试使用GridLayoutManager构建RecyclerView,该GridLayoutManager每行具有可变的列数,如下所示:

在此处输入图片说明

同一行中所有项目的宽度总和将始终为屏幕宽度。

我试图重新组织项目列表,将它们按行列表分组,然后每行增加一个LinearLayout。效果不佳。

所以我被困住了,没有想法。任何帮助将非常感激

android gridlayoutmanager android-recyclerview

2
推荐指数
1
解决办法
1931
查看次数

Grid Recyclerview,偶数行3列,奇数行4列

如何创建偶数行 3 列和奇数行 4 列的 Grid Recyclerview?

    lLayout = new GridLayoutManager(getActivity(), 4, LinearLayoutManager.VERTICAL, false); // MAX NUMBER OF SPACES

    lLayout.setSpanSizeLookup(new GridLayoutManager.SpanSizeLookup() {
        @Override
        public int getSpanSize(int position) {
            return (position % 3 == 0 ? 3 : 4);
        }
    });

    recyclerView = (RecyclerView) view.findViewById(R.id.recyclerView);
    recyclerView.setLayoutManager(lLayout);

    if (arrayList != null) {
        adapter = new RecyclerViewAdapter(getActivity(), arrayList);
        recyclerView.setAdapter(adapter);
    }
Run Code Online (Sandbox Code Playgroud)

android android-gridlayout gridlayoutmanager android-recyclerview

2
推荐指数
1
解决办法
7087
查看次数

调整 RecyclerView 项目的大小和位置

我正在使用 RecyclerView 在网格布局中显示项目。下面是模拟器的图像和我需要实现的期望结果。左侧(执行)图像是我的模拟器上的输出,而右侧(所需)是我想要实现的输出。

活动布局 XML

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
  android:id="@+id/parentLayout"
  android:layout_width="match_parent"
  android:layout_height="match_parent"
  android:background="#d3c3c3">

 <include
    android:id="@+id/toolBarIncluded"
    layout="@layout/toolbar_new_layout" />


<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_below="@+id/toolBarIncluded"
    android:orientation="vertical"
    android:weightSum="1">

    <RelativeLayout

        android:id="@+id/recyclerAdView"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_margin="10dp"
        android:layout_weight="0.65"
        android:background="#009688" />

    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_below="@+id/recyclerAdView"
        android:layout_gravity="center"
        android:layout_weight="0.35"
        android:background="#00000000"
        android:gravity="center">

        <android.support.v7.widget.RecyclerView

            android:id="@+id/recyclerGridView"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_margin="2dp"
            android:background="#00000000"
            android:foregroundGravity="center" />

    </RelativeLayout>

</LinearLayout>
Run Code Online (Sandbox Code Playgroud)

列表项 XML

 <?xml version="1.0" encoding="utf-8"?>
 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 android:id="@+id/llGridItemLayout"
 android:layout_width="wrap_content"
 android:layout_height="wrap_content"
 android:layout_gravity="center"
 android:layout_margin="6dp"
 android:background="@drawable/drawable_grid_item_background"
 android:gravity="center"
 android:paddingStart="2dp"
 android:paddingEnd="2dp"
 android:orientation="vertical">

 <ImageView
    android:id="@+id/ivItemIcon"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:scaleType="fitCenter"
    android:src="@drawable/ic_new_receipt_wrong" />

  <TextView
    android:layout_marginTop="6dp"
    android:id="@+id/tvItemName"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:lines="1" …
Run Code Online (Sandbox Code Playgroud)

android grid-layout gridlayoutmanager android-recyclerview recyclerview-layout

2
推荐指数
1
解决办法
6784
查看次数

Android GridLayout 根据行宽不同的跨度计数

我有一个带有 GridLayoutManager 作为布局管理器的 recyclerview,我想要实现的效果如下图所示

在此输入图像描述

正如您所看到的,每行可能有多个项目,仅基于项目宽度,每个项目都是一个具有wrap_content宽度的 TextView,但所有项目都具有相同的高度。
我知道可以设置行跨度,SpanSizeLookup但为此,我应该知道之前的跨度计数,而我的列表行将仅按项目宽度填充
有人可以帮助我吗?

android gridlayoutmanager android-recyclerview

2
推荐指数
1
解决办法
3371
查看次数