Articles of android recyclerview

RecyclerView在聊天屏幕上的notifyDataSetChanged上滚动到顶部

我正在尝试使用recyclerView创build消息types的屏幕,这将从底部开始,并将加载更多的数据,当用户到达最高端的聊天。 但是我面对这个奇怪的问题。 我的recyclerView在调用notifyDataSetChanged时滚动到顶部。 由于这onLoadMore被多次调用。 这是我的代码: LinearLayoutManager llm = new LinearLayoutManager(context); llm.setOrientation(LinearLayoutManager.VERTICAL); llm.setStackFromEnd(true); recyclerView.setLayoutManager(llm); **在适配器 @Override public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) { if (messages.size() > 8 && position == 0 && null != mLoadMoreCallbacks) { mLoadMoreCallbacks.onLoadMore(); } **在活动 @Override public void onLoadMore() { // Get data from database and add into arrayList chatMessagesAdapter.notifyDataSetChanged(); } 这只是recyclerView滚动到顶部。 […]

使用AccessibilityService从(Facebook)RecyclerView中读取文本

我怎样才能看到非重点RecyclerView儿童(项目)的文字? 我的无障碍服务应该从包含关键字的屏幕上读出文字。 这在大多数情况下效果很好,除了我正在处理RecyclerViews,特别是在Facebook应用程序中。 Facebook提要和评论屏幕都基于RecyclerView,而且似乎也无法让我从他们的可访问性事件中获得我需要的文本。 我试过了: public void onAccessibilityEvent(AccessibilityEvent event) { //I've tried looping through event.getText() and it does not contain the text entries //I've also tried the following (with various null checks) AccessibilityRecordCompat record = AccessibilityEventCompat.asRecord(event); AccessibilityNodeInfoCompat source = record.getSource(); List<AccessibilityNodeInfoCompat> nodes = source.findAccessibilityNodeInfosByText("…"); //(and loop through the entries) //I've also tried limiting to the […]

与ViewPager和RecyclerView错误

我在ViewPager的第一个片段中使用了带有RecyclerView的ViewPager。 当我从左向右滚动时,没有错误。 但是,当我从右向左滚动(从ViewPager的#1片段#2)时,出现以下错误: 05-10 20:21:07.546 20002-20002/com.graffiti75.android.worldremit E/AndroidRuntime﹕ FATAL EXCEPTION: main Process: com.graffiti75.android.worldremit, PID: 20002 java.lang.NullPointerException: Attempt to invoke virtual method 'boolean android.support.v7.widget.RecyclerView$LayoutManager.canScrollHorizontally()' on a null object reference at android.support.v7.widget.RecyclerView.onInterceptTouchEvent(RecyclerView.java:1819) at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1960) at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2405) at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2049) at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2405) at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2049) at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2405) at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2049) at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2405) at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2049) at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2405) at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2049) at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2405) at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2049) […]

ViewPager刷卡不适用于RecyclerView

我想实现一个简单的滑动导航使用ViewPager与片段,持有和pipe理RecyclerView。 碎片被创build并且可以使用setCurrentItem()来切换,但是你不能左右切换页面。 ViewPager似乎忽略任何滑动手势。 我的活动布局: <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:layout_width="match_parent" android:layout_height="match_parent"> <android.support.v4.view.ViewPager android:id="@+id/viewPager" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_marginTop="?attr/actionBarSize"/> <android.support.v7.widget.Toolbar … /> </FrameLayout> 我使用FragmentPagerAdapter在我的onCreate()填充ViewPager,如下所示: viewPager = (ViewPager) findViewById(R.id.viewPager); viewPager.addOnPageChangeListener(this); viewPager.setAdapter(new FragmentPagerAdapter(getSupportFragmentManager()) { @Override public Fragment getItem(int position) { switch (position) { case 0: return new Dummy2Fragment(); case 1: return new Dummy2Fragment(); default: return null; } } @Override public int getCount() […]

高级RecyclerView库 – 代码示例

https://github.com/h6ah4i/android-advancedrecyclerview 这似乎是一个伟大的图书馆,它提供了什么function。 但是,它缺乏良好的文档。 它有一个关于Swipeable项目的“教程”,但像其他人一样,我不能遵循它。 有没有人有一个工作的例子,或任何人都可以做一个简单的用例刷卡项目,并显示下使用这个库的button? 这对于许多对此function感兴趣的人来说是有用的。

如何获得点击RecyclerView(不是孩子)

有没有什么办法可以在RecyclerView上设置RecyclerView ? 我有一个RecyclerView与其中的一些孩子,并在父RecyclerView上设置一个OnClickListener 。 但是,点击该视图时, onClick不会触发。 看到下面的示例代码 – 我们想要获得点击父母,而不是孩子。 在这种情况下,我们不关心点击项目。 我试图做setFocusable(false) , setOnClickListener(null) setClickable(false)和setOnClickListener(null)的孩子无济于事。 无论如何,我不认为孩子们正在窃取父母的点击,因为当我点击没有孩子的地方时,点击也不会注册。 package com.formagrid.hellotest; import android.app.Activity; import android.os.Bundle; import android.support.v7.widget.LinearLayoutManager; import android.support.v7.widget.RecyclerView; import android.util.Log; import android.view.View; import android.view.ViewGroup; import android.widget.TextView; import java.util.Arrays; import java.util.List; public class HelloActivity extends Activity { private RecyclerView mRecyclerView; private RecyclerAdapter mAdapter; @Override protected void onCreate(Bundle savedInstanceState) { […]

RecyclerView可扩展cardView

我用里面的CardView项目与RecyclerView做一个小项目。 我创build了可扩展卡(通过按下卡内的小button进行扩展)。 每张牌总是包含可见部分(id:top_layout)和可展开部分(id:expandable_part_layout)。 问题是当我展开扩展后的最后一个项目或项目在RecyclerView的下边缘下方(项目的某些部分或扩展项目对用户不可见)时,RecyclerView应该向上滚动所有项目以显示我扩展的整个项目。 我尝试使用scrollToPosition和类似的方法滚动到扩展卡的结束,但没有成功。 所以,我的问题是如何使我的扩展卡后,向上滚动RecyclerView关于扩展部分卡的高度? – 这是我的想法,也许有人有更好的解决scheme。 <android.support.v7.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:layout_width="match_parent" android:layout_height="wrap_content" app:cardCornerRadius="8px" app:cardPreventCornerOverlap="false"> <RelativeLayout android:layout_width="match_parent" android:layout_height="wrap_content" > <RelativeLayout android:id="@+id/top_layout" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentBottom="false" android:layout_alignParentTop="true" > <!– some other controls –> <ImageButton android:id="@+id/card_header_inner_expand_btn" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentRight="true" android:background="?android:selectableItemBackground" android:clickable="true" android:padding="6dp" android:src="@drawable/expand_icon" /> </RelativeLayout> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/expandable_part_layout" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_below="@+id/top_layout" android:animateLayoutChanges="true" android:clickable="false" android:visibility="gone"> <RadioGroup android:id="@+id/extened_stage_radiogroup" android:layout_width="wrap_content" android:layout_height="wrap_content" […]

确定LayoutManager预布局中的显示视图

当项目从可见屏幕边界移动到可见点时,我想在自定义LayoutManager中支持预测animation。 我所做的所有填充操作都在onLayoutChildren(RecyclerView.Recycler recycler, RecyclerView.State state) 。 根据支持预布局阶段( state.isPreLayout() )中的预测animation的文档,我应该设置更改animation的初始条件(例如,在某处显示视图的位置) 问题是,我无法find一种方式来确定预布局哪些视图将从外部移动,因为我只能够使用当前附加到RecyclerView视图和onItemsMoved(RecyclerView recyclerView, int from, int to, int itemCount)方法在预布局阶段之后调用。 (例如onItemsRemoved 在预布局之前调用) 这是与LayoutManager的错误,或者我可以以某种方式确定预布局哪些视图即将被移动? PS:我能够保持从可见点到外部的预测animation,因为我能够循环通过可见视图,并确定与recycler.convertPreLayoutPositionToPostLayout哪些将被移动。 //childViews is an iterable over RecyclerView items for (View view : childViews) { RecyclerView.LayoutParams lp = (RecyclerView.LayoutParams) view.getLayoutParams(); boolean probablyMovedFromScreen = false; if (!lp.isItemRemoved()) { //view won't be removed, but maybe it is moved […]

将偏移量应用于GridLayout项目,并在所有项目中保持相同的大小

我想在网格中的项目之间创build一个空间。 项目应该都有相同的宽度/高度。 我试过了: 创build一个将偏移量应用于所有栅格项的GridLayoutOffsetDecorator : class GridLayoutOffsetDecorator(var offset: Int) : RecyclerView.ItemDecoration() { override fun getItemOffsets( outRect: Rect, view: View, parent: RecyclerView, state: RecyclerView.State?) { super.getItemOffsets(outRect, view, parent, state) outRect.set(offset, offset, offset, offset) } } 偏移量为8dp会在项目之间创build一个16dp空间。 所以我们仍然需要在外边缘应用8dp的填充: <android.support.v7.widget.RecyclerView android:id="@+id/productList" android:layout_width="match_parent" android:layout_height="match_parent" android:clipToPadding="false" android:padding="8dp" /> 结果是: 问题:物品的尺寸不一样: 当你看到蓝线时,你会发现身高略有差异。 只有在填充回收站视图后才会出现此差异。 这个填充似乎稍微调整了一些项目的大小。 你们有这个问题的经验吗? 任何想法如何解决? 通过从项目中删除图像,高度差异消失。 这是如何设置图像: <SquareImageView android:id="@+id/image" android:layout_width="match_parent" […]

将RecyclerView中的CardView展开为Google Activity中的“收件箱”之类的新活动

我使用Recycler View作为我的列表视图和CardView作为列表项目。 当我点击列表中的任何项目(例如Google / Gmail在收件箱应用程序中展开的项目)时,我想展开Cardview。 请指导!