Articles of android recyclerview

何时在RecycleView适配器中调用getItemCount()方法?

我有一个适配器,可以将数据填充到RecyclerView 。 我没有调用notifyDataSetChanged() ,我将适配器设置为onCreateView()的RecyclerView (所以在getItemCount()应该调用一次)在Fragment中,但我发现多次调用getItemCount() 。

在NestedScrollView中使用RecyclerView的ItemTouchHelper:拖动滚动不起作用

我已经实现了ItemTouchHelper,就像在这篇文章中描述的那样: https ://medium.com/@ipaulpro/drag-and-swipe-with-recyclerview-b9456d2b1aaf#.k7xm7amxi 如果RecyclerView是CoordinatorLayout的子项,则一切正常。 但是如果RecyclerView是CoordinatorLayout中的NestedScrollView的子代,则拖动滚动不再起作用。 拖动项目并将其移动到屏幕的顶部或底部,RecyclerView不会像它不是NestedScrollView的子项那样滚动。 有任何想法吗?

软键盘打开然后单击edittext关闭

我有一个Recyclerview,其中一个项目有一个edittext,但每次我clcik on field开始输入软键盘打开然后立即关闭。 有谁之前经历过这个吗 ?

当水平RecyclerView作为垂直RecyclerView中的项目放置时,自动滚动即将发生

为了复制问题,我克隆了一个现有项目并添加了两个片段。 所以现在有一个带有ViewPager的Activity ,它有2个片段。 每个Fragment都有一个RecyclerView (垂直),其中包含多个RecyclerView项(水平)。 现在的问题是当中间点水平RecyclerView位于顶部时,切换选项卡上的垂直RecyclerView的自动滚动。 例如: 第1页滚动到此位置 (请注意,第一个H-Recycler视图设置为仅一半可见) 然后点击tablayout上的第2页,转到第2页。 现在再次点击tablayout上的第1页返回页面1.此处预期的滚动位置是我们之前离开的位置,但它会自动滚动到顶部位置。 喜欢这个 (第一个RecyclerView完全可见,而不是一半。) 在找出解决方案时,我得到了一些线索。 v24.1.1和v24.2.1的库(在编写本文时最新)会出现此问题,但当它降级到v23.4.0时,它会按预期工作。 所以很明显,库中的某些东西被修改导致了这种行为。 与包含webview的项目遇到相同的问题。 webView和H-recyclerView之间的共同点是两者都可以在内部水平滚动。 问题可能与滚动事件的消耗有关。

高架RecyclerView项目逐渐变形(高程变化)

任何想法为什么RecyclerView项目变形,每个连续项目变得更糟? 更新:我正在使用CardViews,现在没有视图“变形”,但阴影/海拔高度发生变化。 根据项目垂直位于屏幕上的位置,高程看起来更高,阴影随着项目向下滚动而增长。 请在此处观看video: https : //youtu.be/nROYq8rpUMs 。 我已经建立了一个新项目,只留下展示问题所需的代码: MainActivity.java package tzig.schm00.masterdetail; import android.os.Bundle; import android.support.annotation.NonNull; import android.support.v7.app.AppCompatActivity; import android.support.v7.widget.RecyclerView; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.TextView; import tzig.schm00.masterdetail.dummy.DummyContent; import java.util.List; public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); View recyclerView = findViewById(R.id.item_list); setupRecyclerView((RecyclerView) recyclerView); } private void […]

在recyclerview中获取第一个可见项目

我正在尝试获取RecyclerView中第一个可见项目的位置,因为我需要一些关于它的信息(例如标题)。 不幸的是,当我使用LayoutManager.findFirstVisibleItemPosition()它始终返回0。 此外,我的RecyclerView位于NestedScrollView中。 所有这些项目都在PageAdapter(TabLayout)中。 这是我设置RecyclerView的两种方法: private void initializeAdapter() { NaBiezacoAktualnosciAdapter adapter = new NaBiezacoAktualnosciAdapter(items, getContext()); recyclerView.setAdapter(adapter); } private void initializeLayoutManager(final View v) { final ExpansiveLayoutManager llm = new ExpansiveLayoutManager(getActivity()); recyclerView.setLayoutManager(llm); recyclerView.setNestedScrollingEnabled(false); recyclerView.setHasFixedSize(true); recyclerView.addOnItemTouchListener( new RecyclerItemClickListener(getContext(), new RecyclerItemClickListener.OnItemClickListener() { @Override public void onItemClick(View view, int position) { } }) ); NestedScrollView nestedScrollView = (NestedScrollView) v.findViewById(R.id.nested); nestedScrollView.setOnScrollChangeListener(new […]

为什么ListView和RecyclerView是focusableInTouchMode?

ListView(或精确的AbsListView)和RecyclerView在其构造函数中调用setFocusableInTouchMode(true) 。 根据我的理解(部分取决于Romain Guy的这篇古老post )和(有限的)构建键盘可访问应用程序的经验,应用程序需要启用此属性是非常罕见的。 在post中,他解释说: 此特殊模式是为接收文本输入的小部件创建的,如EditText,或者在启用过滤时,为ListView创建。 我理解EditText,它可以在用户触摸它时获得焦点(可在触摸模式下聚焦),这样键输入就可以定向到正确的视图(如果您考虑在单个屏幕上使用多个EditTexts的情况,这很容易理解) 。 我不遵循“过滤”的含义(以及为什么需要启用此属性),也不遵循构造函数中默认设置的原因。 我遇到的问题(提示这个问题)是我试图在ViewPager中启用键盘导航的时候。 这就是我最终的结果: 每个页面都是RecyclerView。 RecyclerView中的每个项目视图都是可聚焦的,并且具有正确的焦点和按下状态,如gif中所示。 理想情况下(我的结果并不理想),如果用户专注于位置X,并向右导航,那么他们应该在下一列的相应行中: [ ][ ]|[ ][ ] [ ][ ]|[ ][ ] [ ][X]|[ ][ ] -> [ ][ ]|[X][ ] [ ][ ]|[ ][ ] [ ][ ]|[ ][ ] 默认情况下 ,因为RecyclerView可以在触摸模式下聚焦(因此可以根据定义进行聚焦),右侧的整个RecyclerView会获得焦点,但用户不知道发生了什么。 他们必须按下,然后RecyclerView会关注任何可用的孩子: [ ][ ]|[ ][ ] [ ][ ]|[ […]

RecyclerView列表包含具有角度边界的项目,而不是水平

您将如何实现类似下面示例的列表,其中RecyclerView中的项目之间的边界线是一个角度。 我现在的计划是采取每个项目的最顶部三角形部分并将其渲染到上面的项目中,因此视觉上项目看起来像边界是倾斜的,但实际上它们保持水平。 然后,该项目可以根据点击在项目中的位置来处理项目选择。 但有更好的方法吗? 编辑:考虑到我意识到我不知道如何将图像裁剪为三角形,所以任何指针也是非常有用的。

如何删除间距Horizo​​ntal GridLayoutManager recyclerview android

我使用recyclerview和grid layoutmanager我不添加ItemDecoration GridLayoutManager gridLayoutManager = new GridLayoutManager(TestResultActivity.this, 4, GridLayoutManager.HORIZONTAL, false); gridLayoutManager.setAutoMeasureEnabled(true); grid.setLayoutManager(gridLayoutManager); 但在两行之间,有一行,我不添加它。 我想删除它。

RecyclerView滚动到smoothScrollToPosition(0)后结束

我有使用LinearLayoutManager RecyclerView ( Vertical ,不倒置)。 当我将项目插入或移动到0位置时,会调用此方法: private void scrollToStart() { int firstVisiblePosition = ((LinearLayoutManager) recentList.getLayoutManager()).findFirstCompletelyVisibleItemPosition(); boolean notScrolling = recentList.getScrollState() == RecyclerView.SCROLL_STATE_IDLE; if (firstVisiblePosition < 2 && notScrolling) { recentList.scrollToPosition(0); } } 但有时它会平滑滚动到列表的末尾。 (我在Instagram等应用程序中看到过这样的行为。看起来列表滚动到顶部然后开始向相反方向移动。) 如果我用simple scrollToPosition替换smoothScrollToPosition ,它的行为就应该如此。 如何防止此滚动?