Articles of gridlayoutmanager

RecyclerView – 跳过第一个布局传递的屏幕外项目

我的一个适配器出了问题。 我有一系列图像,我在网格中显示如下: 当我有一个单一屏幕的项目并且它们都显示正常时,这很有效。 当有更多项目向下滚动时,会出现问题。 最初,当我向下滚动项目显示为空白时, GridLayout容器就在那里,显示图像的代码会运行,但它们不会出现在屏幕上,如下所示: 如果我向上滚动,然后再次向下滚动,图像会出现在它们应该的位置: 看起来我需要刷新布局或告诉渲染器某些内容已发生变化,但我尝试的任何东西似乎都没有做任何事情。 我试过调用requestLayout并invalidate但它似乎没有解决问题。 我还注册了一个GlobalOnLayoutListener,但这并没有更好。 这是相关的代码: 这是我的onBindViewHolder方法 final GridLayout grid = ((KKAlbumViewHolder) holder).mGridLayout; grid.removeAllViews(); int width = grid.getWidth(); if(width > 0) { albumHolder.setPreviewImages(posts); }else { albumHolder.itemView.addOnLayoutChangeListener(new View.OnLayoutChangeListener() { @Override public void onLayoutChange(View v, int left, int top, int right, int bottom, int oldLeft, int oldTop, int oldRight, int oldBottom) { […]

如何实现水平gridlayoutmanager

如何使用recyclerview实现水平gridlayoutmanager。 固定行数。 和水平滚动。 喜欢这个… gridLayoutManager = new GridLayoutManager(getContext(), 1, GridLayoutManager.HORIZONTAL, false); recyclerView.setLayoutManager(gridLayoutManager); recyclerView.setHasFixedSize(true); 我试着这样做。 但这不会在项目中显示任何内容。

Recyclerview同时绑定所有视图

我在另一个recyclerview(使用LinearLayoutManager )中有一个垂直的recyclerview(带有GridLayoutManager )。 我现在面临的问题是,内部的recyclerview(使用GridLayoutManager)同时绑定了它的所有项目,甚至是当前不在屏幕上的视图( onBindViewHolder()被调用所有项目)。 为了给你提供更多信息,在我的布局文件中,我将我的Recycler视图的高度设置为wrap_content 。 我认为问题是,因为有2个嵌套的垂直回收视图,当父RV想要测量它的子节点并且子节点是另一个RV时,在onMeasure()它计算整个RV所需的大小,而不仅仅是它的部分想要在屏幕上绑定。 知道怎么解决这个问题吗? 这是我的外部recyclerview的布局文件: 以下是我的内部回收者视图的代码: PS:我正在使用此适配器委托进行外部回收查看: https : //github.com/sockeqwe/AdapterDelegates

如何使RecyclerView顺利滚动?

这更像是一个通用的问题,但经过大量的搜索和尝试,我无法理解为什么这么难以实现。 这是我能find的最接近的答案,但仍然无法实现。 具体来说,我正在使用RecyclerView和GridLayoutManager。 我想要的是平滑滚动的网格布局(如默认的gallary应用程序),没什么特别的,但网格布局管理器的默认实现以“生涩”的方式滚动视图。 我试图从上面的链接实现该方法,但没有成功。 我也尝试实现LinearSmoothScroller,但我不确定如何实现computeScrollVectorForPosition方法。 关于computeScrollVectorForPosition的Google文档字面上有0个字。 我find了这个3部分的教程 ,但它没什么帮助。 所以,我想问的是:我们可以在LinearSmoothScroller中实现某种模板代码,还是扩展RecyclerView.SmoothScroller并实现平滑滚动? 即使代码依赖于gridlayout中每行的项目数和项目数,也必须有一些方法可以轻松完成。 我在这里错过了什么吗?

RecyclerView GridLayoutManager具有全宽标题

我在这里使用一个非常有用的示例来显示RecyclerView和GridLayoutManager以显示带有标题的网格。 它看起来很不错,但我的平面设计师希望标题项占据RecyclerView的整个宽度。 现在有填充。 当我设置GridLayoutManager时,我添加填充(我仍然想要其他网格项):[它使用Xamarin C#] var numColumns = myListView.MeasuredWidth / tileSizeMax; myGridView.SetPadding(tilePadding, tilePadding, tilePadding, tilePadding); layoutManager = new GridLayoutManager(Activity, numColumns); myListView.SetLayoutManager(layoutManager); 那么,如何将标题项的填充设置为不同…或者使其在填充上绘制自己?

使用RecyclerView GridLayoutManager通过ItemDecoration创建列间距时,项目的宽度不同

我正在尝试使用RecyclerView和GridLayoutManager来制作一个3列网格,我使用ItemDecoration来制作列间距,现在问题是第三列中项目的宽度小于第一列和第二列中的项目! 请参阅下面的屏幕截图。 如果我没有将自定义ItemDecoration添加到RecyclerView ,一切正常。 这是我的代码: MainActivity.java: public class MainActivity extends AppCompatActivity { private RecyclerView mRecyclerView; private MyAdapter mAdapter; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mRecyclerView = (RecyclerView) findViewById(R.id.recycler_view); mAdapter = new MyAdapter(); mRecyclerView.setAdapter(mAdapter); GridLayoutManager gridLayoutManager = new GridLayoutManager(this, 3); mRecyclerView.setLayoutManager(gridLayoutManager); int horizontalSpacing = 20; int verticalSpacing = 10; SpacingDecoration decoration = new SpacingDecoration(horizontalSpacing, […]

如何在GridLayoutManager中设置项目行的高度

我的Recycler项目在onCreateViewHolder中膨胀 我想展示这样的东西,哪一行有一半高度的回收者View? 并在其余空间添加填充? 我可以通过GridLayoutManager来做到这一点吗? 这是我的GridLayoutManager GridLayoutManager glm = new GridLayoutManager(getActivity(), 2); recyclerView.setLayoutManager(glm);

android – 如何捕获与RecyclerView一起使用的ItemTouchHelper的Drop动作

我对RecyclerView的 ItemTouchHelper有问题。 我在做一个游戏。 游戏板实际上是RecyclerView。 RecyclerView具有一些跨度计数的GridLayoutManager 。 我想实现拖放 recyclerview的项目。 任何项目都可以拖动所有方向(向上,向下,向左,向右)。 private void initializeLayout() { recyclerView.setHasFixedSize(true); recyclerView.setLayoutFrozen(true); recyclerView.setNestedScrollingEnabled(false); // set layout manager GridLayoutManager layoutManager = new GridLayoutManager(getContext(), BOARD_SIZE, LinearLayoutManager.VERTICAL, true); recyclerView.setLayoutManager(layoutManager); // Extend the Callback class ItemTouchHelper.Callback itemTouchCallback = new ItemTouchHelper.Callback() { public boolean onMove(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder, RecyclerView.ViewHolder target) { Log.w(TAG, “onMove”); return false; } @Override […]

更改RecyclerView gridlayout中的列数

我试图根据显示大小更改回收器视图(网格布局)中显示的列数。 但是我无法find实现它的正确方法。 目前我正在使用treeViewObserver根据屏幕大小的变化(在定向期间)更改列数。 因此,如果应用程序以纵向模式打开,列数(在手机上)它决定为一个,看起来不错,但当应用程序直接以横向模式打开时,此方法不起作用,其中网格中有单个拉出的卡片显示在屏幕上。 这里recList是RecyclerView&glm是RecyclerView中使用的GridLayoutManager viewWidth = recList.getMeasuredWidth(); cardViewWidthZZ = recList.getChildAt(0).getMeasuredWidth(); if (oldWidth == 0) { oldWidth = cardViewWidthZZ; } if (oldWidth <= 0) return; int newSpanCount = (int) Math.floor(viewWidth / (oldWidth / 1.3f)); if (newSpanCount <= 0) newSpanCount = 1; glm.setSpanCount(newSpanCount); glm.requestLayout(); 最好的祝福

如何从右到左用GridLayoutManager填充RecyclerView

我正在尝试使用GridLayoutManager将一些数据填充到RecyclerView : GridLayoutManager layoutManager = new GridLayoutManager(this, 3, GridLayoutManager.VERTICAL, false); 这将从左到右将数据填充到网格中。 第一项将被放入左上角等地方。 但我正在开发的应用程序是为RTL语言设计的,所以我需要从右到左填充它。 我试图将最后一个参数更改为true 。 但它只是将RecyclerView向下滚动。 另外,为RecyclerView设置layoutDirection属性不起作用(不考虑我的min API为16,并且为API17 +添加了此属性): 如何使用RecyclerView创建从右到左填充的网格?