Articles of android recyclerview

如何recycleview适配器下另一个recycleview适配器?

我有一个RecyclerView 。 它有一个自定义的布局和自定义布局里面的是另一个RecyclerView 。 当我通知回收商视图,一个项目已被删除,我的主要回收视图更新,但我的自定义视图回收视图没有得到通知。 SwipeDismissRecyclerViewTouchListener listener = new SwipeDismissRecyclerViewTouchListener.Builder( recyclerView, new SwipeDismissRecyclerViewTouchListener.DismissCallbacks() { @Override public boolean canDismiss(int position) { return true; } @Override public void onDismiss(View view) { // Do what you want when dismiss int id = recyclerView.getChildAdapterPosition(view); databaseHelper.deleteSingleItem(cartAdapter.cartItemName.get(id)); Log.e(TAG, "onDismiss: " + subdata.get(id) + " " + data.get(id)); subdataprice.remove(id); subdata.remove(id); addonlist.remove(id); price.remove(id); […]

让Android RecyclerView更新React Native组件内的视图

我正在使用React Native制作移动应用程序,包含的列表组件没有足够高的性能,所以我开始使用Android的RecyclerView作为列表组件。 虽然有一个问题。 RecyclerView不更新其内容视图,直到我滚动或更改RecyclerView的大小。 什么可能导致这个问题,我该如何解决它? 我已经尝试notifyDatasetChanged,notifyItemChanged,forceLayout,invalidate,postInvalidate和许多不同的变化与每个。

在Android中如何处理recyclerView中的多个布局点击

在我们的应用程序中,我们有消息列表。 我们正在切换到RecyclerView 。 我们的信息可以来自文字,图像。 示例消息可以像这样。 处理点击使用这个类: public class RecyclerViewItemClickListener implement RecyclerView.OnItemTouchListener { public static interface OnItemClickListener { public void onItemClick(View view, int position); public void onItemLongClick(View view, int position); } private OnItemClickListener mListener; private GestureDetector mGestureDetector; public RecyclerViewItemClickListener(Context context, final RecyclerView recyclerView, OnItemClickListener listener) { mListener = listener; mGestureDetector = new GestureDetector(context, new GestureDetector.SimpleOnGestureListener() { […]

在使用StaggeredGridLayoutManager时停止移动项目

我在android中使用staggredGridLayoutManager的recyclerview。 问题是,有时当滚动项目移动到适合在屏幕上。 通常没有什么可担心的,但在我的情况下,它把所有的东西都搞乱了! 那么是否有阻止这种行为呢? 不只是animation。 整个项目重新安排的东西。 谢谢

Android的selectableItemBackground长按没有发光效果

我正尝试在Android应用程序中使用RecyclerView。 我将RecyclerView示例项目导入到Android Studio中,并且工作正常。 我想让回收者视图中的物品在用户长时间按下时作出反应。 为了做到这一点,我把视图的背景设置为selectableItemBackground 。 我做了这些修改: 在text_row_item.xml里面,我在FrameLayout标签上添加了这一行: android:background="?android:attr/selectableItemBackground" 在CustomAdapter.java里面,我在FrameLayout上添加了一个长的监听器: v.setOnLongClickListener(new View.OnLongClickListener() { @Override public boolean onLongClick(View view) { Log.d(TAG, "Element " + getPosition() + " long clicked."); return true; } }); 如果我在棒棒糖模拟器上运行修改后的样本,当我在回收站视图中长按项目时,会产生很好的连锁反应。 但是,如果我在KitKat模拟器上运行应用程序,我不会得到KitKat的发光效果。 当我长时间按下列表中的项目时会变暗,并且长按听众确实运行,但是我期望随着长按的发生,颜色也会发光。 下面是我所说的gif: 为什么selectableItemBackground不能在KitKat上运行发光效果? 我怎样才能使它在KitKat和棒棒糖上工作?

一起滚动多个水平的RecyclerView

我创build了一个EPG视图,我在其中有一个LinearLayout封装的多个水平的RecyclerView (作为电视节目)。 当我滚动一个RecyclerView时,我希望剩下的视图一起滚动。 @Override public void onActivityCreated(Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); layoutContent.setWeightSum(epg.getChannels().size()); //prepare recycler views and add into layoutContent based on epg channels for(EPG.Channel ch : epg.getChannels()){ AppLog.error(TAG, "Creating RecyclerView for: " + ch.getDisplayName()); //create new recycler view final RecyclerView rv = new RecyclerView(layoutContent.getContext()); lstRecyclerViews.add(rv); //set layout manager rv.setLayoutManager(new LinearLayoutManager(layoutContent.getContext(), LinearLayoutManager.HORIZONTAL, false)); //create adapter rv.setAdapter(new MyAdapter(ch.getPrograms())); […]

scrollBy在嵌套的recyclerview中无法正常工作

我有一个垂直滚动RecyclerView水平滚动内部RecyclerViews就像这样。 通过这个实现,用户可以同步滚动每个水平的回收站。 但是,当用户垂直滚动到父回收站视图时,刚刚附加在窗口上的新水平回收站不会显示在同一个滚动x位置上。 这个是正常的。 因为它刚刚创build。 所以,我试图在显示之前滚动到滚动的位置。 像这样: 注意 :这是父级回收站的方向是垂直的适配器。 @Override public void onViewAttachedToWindow(RecyclerView.ViewHolder holder) { super.onViewAttachedToWindow(holder); CellColumnViewHolder viewHolder = (CellColumnViewHolder) holder; if (m_nXPosition != 0) { // this doesn't work properly viewHolder.m_jRecyclerView.scrollBy(m_nXPosition, 0); } } 正如你所看到的, scrollBy不会影响第10行 , 第11行 , 第12 行和第13行。之后,我debugging了代码,以便能够找出发生了什么事情。 当我使用scrollBy设置滚动位置时,childCount()对于第10 行 , 第11 行 , 第12 行和第13 行返回零,因此它们不滚动。 但为什么 ? 为什么其他人工作? 我怎样才能解决这个问题 […]

SQLite数据到一个RecyclerView

该应用程序在SQLite数据库中有数据。 UI主要是一个RecyclerView。 问题是如何最好地将数据从数据库传输到UI,同时保持主线程? 我原本计划使用CursorLoader,ContentProvider和RecyclerView。 但是阅读它看起来像RecyclerView没有对Cursor提供的数据的开箱即用的支持。 荡。 然后,我留下了几个其他的select… AsyncTask加载数据,将其放入模型对象,并传递到RecyclerView适配器。 除了丑陋之外,它不是configuration更改友好的。 一个自定义的Loader,它从SQL加载数据并将其推入模型对象。 使用Cursor加载器,当它返回Cursor迭代通过它将数据推送到模型对象。 我怀疑这会发生在主线上,可能会损害性能。 使用Otto发送请求消息以请求数据,然后通过返回消息返回模型对象集合。 可能有〜500件东西,所以我觉得我可能会更喜欢奥托这样做。 如果我使用的是模型对象而不是Cursor的集合,我看不到ContentProvider的好处,而且我也失去了UI自动刷新数据更改(这可能是有用的)的能力。 这些选项都没有吸引力,有没有更好的办法? 该应用程序是在时间压力,所以无论是需要相当快实施。 不幸的是,UI需要水平滚动,只针对棒棒糖,所以RecyclerView似乎比ListView更好。

RecyclerView的子项中的WebViews中的数据可以预加载吗?

我有一个使用LinearLayoutManager的RecyclerView,其中每个子卡都包含一个WebView。 我使用loadData()方法将数据加载到WebView中。 当我向下滚动列表时,情况正常,但是当我向下滚动到足以使上述视图得到回收时,当我向后滚动时会出现问题。 当RecyclerView重新连接上面的子节点时,它会重新加载WebView中的数据,但直到WebView出现在屏幕上时才会重新加载数据。 当WebView加载它的数据时,它会将其下面的所有孩子推下屏幕。 因此,当我向上滚动时,WebView底部缓慢地出现在屏幕上,而不是整个WebView跳到WebView顶部的屏幕上。 这是非常刺耳的,不光滑的。 有没有办法告诉适配器或布局pipe理器提前加载WebViews? 如果RecyclerView能够顺利滚动,我会对自己的应用程序感到满意,但是现在,当我向后滚动时,它几乎不可用。

Android:需要更新从微调框中select的项目更新回收视图的build议

我是新来的回收视图。 我的要求如下: – 我必须调用一个Web服务,将提供两个数组。 一个与我需要显示在列表中的数据。 为此,我正在使用RecyclerView 。 另一个arrays是状态,我在微调中显示。 这个Web服务是分页的。 我已经添加了分页,它工作正常。 – 当用户从微调框中select一些其他元素时,我必须再次进行Web服务调用,并且回收者视图数据应该改变。 目前,在分页的情况下,我从下面的页面获取更多的数据: mAccountListingsAdapter.notifyItemRangeInserted(mAccountListingsAdapter.getItemCount(), mListings.size() – 1); 而且,当我改变微调的数据时,我正在做以下工作: mListings.clear();//Clear the data set mAccountListingsAdapter.notifyDataSetChanged();//Call notify data set changed on recycler view adapter getAccountListings();//Fetch new data from the web service and display in recycler view 但是,build议不要直接在回收视图适配器上调用notifyDataSetChanged(),而应该调用特定的notifyXXX方法,以避免性能和animation问题。 所以,我怀疑,如果我正确地通知旋转工具的onItemSelected()的回收视图适配器,或者应该改变它。 PS我试着在onItemSelected下面: int size = mListings.size(); mListings.clear(); mAccountListingsAdapter.notifyItemRangeRemoved(0, size – 1); […]