Articles of android recyclerview

如何将数据库中的数据显示到具有高性能的RecyclerView?

我为RecyclerView编写了自己的CursorAdapter,如下面的链接: https : //gist.github.com/skyfishjy/443b7448f59be978bc59 然后我发现每当我在数据库中更改某些东西并希望在RecyclerView中显示它时,我需要通过db.query()创建一个新的Cursor并使用CursorAdpater的changeCursor()。 由于query()将扫描数据库中的所有行,因此即使我只将一行插入数据库,当数据量很大时,RecyclerView也会缓慢刷新。 此外,众所周知,RecyclerView为开发人员提供了notifyItemInserted / Removed(position),以便RecyclerView可以部分刷新,这对内存/时间有用且有益。 但是,当我使用CursorAdapter时,我不知道何时以及如何使用这些方法,因为更改光标不会直接向使用RecyclerView的数据集绑定添加内容,而是实际刷新所有项目。 那么有没有更好的方法在RecyclerView中显示数据库中的数据并使用RecyclerView的改进方法来显示各种数据库?

活动的每个片段中的浮动操作按钮的不同实现

这是关于协调活动中浮动操作按钮的行为的问题,其中包含5个片段。 在我的应用程序中,我有一个Activity,其中包含一个ViewPager和一个用FloatingActionButton定义的xml。 ViewPager包含Fragments,在每个Fragment中都有一个RecyclerView.On点击浮动操作按钮我实现了scrollToPosition(0)。 由于我在main活动的xml文件中实现了Floating ActionButton,因此scrollToPosition()仅在单击浮动操作按钮的最后一个片段中起作用。我如何克服这一点,以便在任何片段中点击浮动按钮时,回收器视图滚动到顶部? 我已经尝试在片段布局文件中实现floatingactionbutton并且它完全正常。但是这个问题是当我从一个片段滑动到另一个片段时,浮动动作按钮将会移动。所以有任何方式可以让我在其中实现浮动按钮主活动xml文件,并且仍然能够在点击FloatingActionButton的每个片段中实现scrollToPosotion(0)? 非常感谢任何建议。 以下是包含浮动操作按钮的xml文件。 以下是片段的xml文件 以下是每个片段中浮动操作按钮的实现 fab = (android.support.design.widget.FloatingActionButton) view.findViewById(R.id.fab); fab.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { LinearLayoutManager llm = (LinearLayoutManager) mRecyclerView.getLayoutManager(); llm.scrollToPositionWithOffset(0, 0); } });

Android:在viewpager中滚动使用recyclerview的问题

我在ViewPager中有一个RecyclerView ,它只占据屏幕的下半部分,而我想要做的是在RecyclerView收到垂直滚动事件时整个屏幕滚动。 UI层次结构简而言之: CoordinatorLayout — AppBarLayout — Toolbar — Bunch of static LinearLayouts, occupy most of screen — TabLayout — ViewPager — Fragments with RecyclerView 我有什么 : 根据我的理解, RecyclerView具有内存效率,并试图适应屏幕中可用的任何空间。 在我的应用程序中,我有一个ViewPager托管多个选项卡,每个选项卡都有一个RecyclerView来显示不同的东西。 你能否告诉我一些关于如何使整个屏幕滚动的想法? 我猜测最佳镜头是在屏幕中间的静态内容中添加带有视差的CollapsingToolbarLayout 。 我甚至试图这样做,但UI完全被打破了。 这很困难因为我只希望屏幕中间的内容滚动出来,而不是顶部的工具栏。 我对NestedScrollView也没有太多运气,显然它与ViewPager和CoordinatorLayout兼容性并不是直截了当的。 我想要的是: 主要活动布局: Viewpager中的片段: 提前致谢! 更新:我在这里收到的回复(感谢我的回复)来得太晚了。 如果有人知道哪个是正确答案,请告诉我!

材料卡与Cardslib库

我正在从Github的Cardslib库中实现新的Material Card设计。 Library Link: Cardslib Github但我无法在Recycler视图中实现多张卡片。 如果有人已经实现了新的Cardslib v2库,那将非常有用。 问题是,卡片即将到来,但那些没有背景图像和动作按钮。 我想要实现的卡布局是: 这是RecyclerView的代码 这是Activity的代码 public class AboutActivity extends ActionBarActivity { final int TOTAL_CARDS = 3; //private CardArrayAdapter private CardArrayRecyclerViewAdapter mCardArrayAdapter; private CardRecyclerView mRecyclerView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.about_activity); ArrayList cards = new ArrayList(); mCardArrayAdapter = new CardArrayRecyclerViewAdapter(this, cards); //Staggered grid view CardRecyclerView mRecyclerView = […]

RecyclerView RecyclerViewDataObserver未注册

我正在使用RecyclerView , SyncAdapter和greenrobot eventbus当我的SyncAdapter完成syincing后,我将消息发布到消息总线: EventBus.getDefault().post(new EventMessagesRefreshed()); 在我的目标类中,我执行以下操作: @Subscribe public void onEvent(EventMessagesRefreshed event) { this.init(); } 在我的init()我为recyclerview创建适配器并设置它: public void init() { if(this.listRowParent != null) { this.adapter = new FragmentMessagesListAdapter(this.getActivity(), SingletonMessages.getInstance().getMessages()); this.listRowParent.setAdapter(this.adapter); } } // listRowParent is my RecyclerView! 接收事件的片段位于选项卡视图的内部。 所以有多个选项卡,有时候,当我不在正确的目标选项卡中时, SyncAdapter会将EventMessagesRefreshed到消息总线中,但由于它已注册,它会尝试调用init()并创建适配器并将其设置为RecyclerView 。 如果发生这种情况,我会收到以下错误: Could not dispatch event: class EventMessagesRefreshed to subscribing class class FragmentMessagesList java.lang.IllegalStateException: Observer […]

AsyncTask加载图片RecyclerView

我正在尝试创建一个类似于那个的应用程序 : 在recyclerview中带有一些图像和描述(cardview)的应用程序 首先,我从数据库中加载我的CardView的所有信息,图像标题,描述和图像中的URL。 当我将所有信息都放在RecyclerView中时,(标题和描述)显示正确,但是对于图像,我创建了一个AsyncTask类来加载URL中的图像,让用户不要等待很长时间等待应用程序响应。 如果用户慢慢滚动图像正确加载并且一切正常,但如果我滚动到快速我有一些问题,例如项目3中显示的图像例如显示在最后一项中,直到最后一项图像加载并刷新…. 这里我的适配器的一些代码,我加载图像: @Override public void onBindViewHolder(ViewHolder holder, final int position) { if (holder instanceof EventosViewHolder) { …… //Load the image (getFoto() get drawable) if (eventoInfoAux.getFoto()==null){ CargarImagen cargarImagen = new CargarImagen(((EventosViewHolder) holder).vRelativeLayout,eventoInfo,position); cargarImagen.execute(); }else{ ((EventosViewHolder) holder).vRelativeLayout.setBackground(eventoInfoAux.getFoto()); } } } 这里是CargarImagen类的代码: //Clase para cargar imagenes con una tarea asíncrona desde un url […]

循环RecyclerView

假设我们有以下一组项目视图: View1 -> View2 -> View3 -> … -> View(n-1) -> View(n) 在经典的RecyclerView上,View1将位于第一个位置,而View(n)位于最后一个位置。 现在我想制作那个循环,所以在最后一个位置后我们再次滚动到第一个位置: View1 -> View2 -> View3 -> … -> View(n-1) -> View(n) -> View1 -> View2 -> … 这看起来很简单但我不确定如何在View(n)之后完成“重置”。 任何建议都会非常有用。 谢谢。

一旦Picasso图像加载,Horizo​​ntalGridView / RecyclerView滚动位置就会重置

我有一个Horizo​​ntalGridView,一切都运行良好,但是我用Picasso加载图像,每当图像加载时,Horizo​​ntalGridView就会快速回到第一个项目/起始滚动位置。 我还在活动上有一个地图片段,并注意到当地图与之交互时,Horizo​​ntalGridView会显示相同的行为。 下面是适配器代码。 请帮忙,现在已经坚持了几天…… public class GridElementAdapter extends RecyclerView.Adapter{ private Context context; private Deal[] mDeals; public GridElementAdapter(Context context, Deal[] deals){ this.context = context; this.mDeals = deals; } public static class SimpleViewHolder extends RecyclerView.ViewHolder { public final ImageView dealImage; public final TextView dealTitle; public final TextView dealSubtitle; public final TextView dealPrice; public final TextView dealTime; public […]

Firebase android如何防止FirebaseRecyclerAdapter自动更新?

我有一个FirebaseRecyclerAdapter ,我不想继续更新RecyclerView 。 这是因为我拥有它所以它根据数据库中有多少“视图”用项目填充视图。 问题是,如果其他人查看项目,您在应用程序中看到的列表将继续更改顺序。 有没有办法阻止回收器适配器不断监听数据更改,还是我必须采取另一种方式? 非常感谢任何帮助,谢谢。

如何使用GridLayoutManager删除RecyclerView中的行之间的间距

我正在尝试使用带有GridLayoutManager的RecyclerView全屏网格,但由于某种原因,在我的RecyclerView的行和顶部和底部之间添加了水平空间。 我无法摆脱它。 我搜索了解决方案,并通过明确地将维度设置为0来尝试ItemDecorator ,但这不起作用。 没有其他工作。 图像 。 我的ItemDecorator的代码非常标准,包含在内。 private class RecyclerViewItemDecorator extends RecyclerView.ItemDecoration { private int spaceInPixels; public RecyclerViewItemDecorator(int spaceInPixels) { this.spaceInPixels = spaceInPixels; } @Override public void getItemOffsets(Rect outRect, View view, RecyclerView parent, RecyclerView.State state) { outRect.left = spaceInPixels; outRect.right = spaceInPixels; outRect.bottom = spaceInPixels; if (parent.getChildLayoutPosition(view) == 0) { outRect.top = spaceInPixels; } […]