Articles of android recyclerview

RecyclerView正在切断最后一项

我有一个带有工具栏的片段和里面的recyclerView。 我使用虚拟数据填充recyclerView,然后尝试显示它们。 出于某种原因,recyclerView的最后一个元素正在被截止。 这是片段的XML: 列表中的项目非常简单: 我现在在列表的末尾,但最后一个元素仍然看起来是截止的。 我使用的是2015-09-23 google libraries的最新版本,23.0.1,(即com.android.support:recyclerview-v7:23.0.1),以及build.gradle中的以下配置: compileSdkVersion 23 buildToolsVersion “23.0.1” defaultConfig { minSdkVersion 14 targetSdkVersion 23 versionCode 1 versionName “1.0” multiDexEnabled true// Enabling multidex support } 任何帮助将不胜感激,因为我很难解决这个问题:( 解 好的,在将代码清理到基本要素并消除复杂性之后,我发现了问题:它是错误标志和缺失或额外属性的组合。 以下适用于Android 4.x和5.x: 简而言之,android:fitsSystemWindows =“true”应该只在coordinatorLayout,AppBarLayout和theCollapsingToolbarLayout(我们希望根据Android 5.x上的屏幕进行调整),app:layout_scrollFlags应该设置to“scroll | enterAlways | enterAlwaysCollapsed”,工具栏应该具有高度,actionBar的高度。 最后,最好保持RecyclerView尽可能干净,这样您就可以控制每个订单项的布局间距。

RecyclerView适配器采用错误的值

我有一个RecyclerView显示两种View一种代表User发布,另一种代表Event发布。 两者都有共同的元素,例如显示时间戳的TextView 。 所以我创建了一个PublicationViewHolder ,它将TextView时间戳记转换为variables并加载它。 我的问题是适配器最初加载正确的值,但是当我向下滚动并再次向上滚动时,位置中的值会被其他位置的值更改。 这是代码: public class PublicationViewHolder extends RecyclerView.ViewHolder { private TextView vTimeStamp; public PublicationViewHolder(View itemView) { super(itemView); this.vTimeStamp = (TextView) itemView.findViewById(R.id.txt_view_publication_timestamp); } public void load(Publication publication, int i) { load(publication); try { if (Publication.TYPE_USER_PUBLICATION == publication.getType()) { load((UserPublication) publication); } else if (Publication.TYPE_EVENT_PUBLICATION == publication.getType()) { load((EventPublication) publication); } } catch […]

使用setNestedScrollingEnabled(false)时如何避免阻止滚动?

背景 我们有一个非常复杂的布局,其中包含CollapsingToolbarLayout,以及底部的RecyclerView。 在某些情况下,我们通过在RecyclerView上调用setNestedScrollingEnabled(boolean)来暂时禁用CollapsingToolbarLayout的展开/折叠。 问题 这通常很好。 但是,在某些(有点罕见)情况下,RecyclerView上的慢速滚动会被半阻止,这意味着它会在向下滚动时尝试向后滚动。 这就好像它有2个滚动相互争斗(向上滚动并向下滚动): 触发此操作的代码如下: RES /布局/ activity_scrolling.xml ScrollingActivity.java public class ScrollingActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_scrolling); Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); setSupportActionBar(toolbar); final RecyclerView nestedView = (RecyclerView) findViewById(R.id.nestedView); findViewById(R.id.disableNestedScrollingButton).setOnClickListener(new OnClickListener() { @Override public void onClick(final View v) { nestedView.setNestedScrollingEnabled(false); } }); findViewById(R.id.enableNestedScrollingButton).setOnClickListener(new OnClickListener() { @Override […]

Recyclerview + Content provider + CursorLoader

我在SQLite数据库中有一些数据。我有一个内容提供程序,它将从数据库中获取数据。 现在问题是如何实现cursorLoader与recyclerview一起工作? 此外,任何人都可以解释为什么我们需要将数据从游标传输到对象以显示在listview / recyclerview中而不是直接从游标中显示? 例如,在自定义cursorAdapter类中, Person person = new Person(cursor.getString(cursor.getColumnIndexOrThrow(PERSON_NAME))); textview.setText = person.getName(); 要么 textview.setText = cursor.getString(cursor.getColumnIndexOrThrow(PERSON_NAME)); 以上哪种方法比较好? 在过去,我们曾经有listview和gridview,现在看来它们被合并成为recyclerview。 那么,我如何实现基于网格的recyclerview?

RecyclerView项目没有变化

我在一个片段中有一个RecyclerView ,它在TabLayout中重复出现。 我在RecyclerView中遇到了视图不变的问题。 我在每个标签上都有一个微调器。 我想在选择微调器项时更改数据。 我的案子: 在标签之间切换时 – 项目已更改 在第一个选项卡中在微调器中选择另一个值时 – 项目未更改 。 (但是数据在适配器类中发生了变化。首先,它在选择期间不为null然后为null。但是第一个没有空的数据没有出现,它被替换为null。使用断点find它)。 注意:在这种情况下,切换选项卡时,项目将更改为上一个选项卡中的微调器选定项目。 然后它消失并在选项卡中显示当前项目。 在最后一个选项卡中在微调器中选择另一个值时 – 项目已更改 。 我的视图寻呼机适配器类 public class StudentViewPagerAdapter extends FragmentStatePagerAdapter { private final List mFragmentList = new ArrayList(); private final List mFragmentTitleList = new ArrayList(); public StudentViewPagerAdapter(FragmentManager fm) { super(fm); } public void addFragment(StudentList fragment,Clazz clazz){ mFragmentList.add(fragment); mFragmentTitleList.add(clazz); } […]

如何在RecyclerView上的排序(notifyDataSetChanged)期间提供自定义animation

目前,通过使用默认animationandroid.support.v7.widget.DefaultItemAnimator ,这是我在排序过程中遇到的结果 DefaultItemAnimatoranimationvideo: https : //youtu.be/EccI7RUcdbg public void sortAndNotifyDataSetChanged() { int i0 = 0; int i1 = models.size() – 1; while (i0 < i1) { DemoModel o0 = models.get(i0); DemoModel o1 = models.get(i1); models.set(i0, o1); models.set(i1, o0); i0++; i1–; //break; } // adapter is created via adapter = new RecyclerViewDemoAdapter(models, mRecyclerView, this); adapter.notifyDataSetChanged(); } 但是,我更喜欢提供自定义animation,而不是排序期间的默认animation(notifyDataSetChanged)。 […]

“LayoutManager已附加到RecyclerView”错误

我试图在布局中有多个RecyclerViews但我收到以下错误:“LayoutManager已经附加到RecyclerView” Java代码是: @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { // Inflate the layout for this fragment View view = inflater.inflate(R.layout.fragment_squad, container, false); Activity parentActivity = getActivity(); final ObservableScrollView scrollView = (ObservableScrollView) view.findViewById(R.id.squad_scrollview); final RecyclerView gkRecyclerView = (RecyclerView) view.findViewById(R.id.gk_recycler); final RecyclerView coachRecyclerView = (RecyclerView) view.findViewById(R.id.coach_recycler); coachRecyclerView.setAdapter(new SquadRecyclerAdapter(parentActivity, getSquadDummyData(0))); coachRecyclerView.setLayoutManager(new MyLinearLayoutManager(parentActivity, LinearLayoutManager.VERTICAL, false)); coachRecyclerView.setHasFixedSize(false); […]

即使RecyclerView.findViewHolderForAdapterPosition()在该位置返回null,也不会在视图位置调用onBindViewHolder()

我有一个包含13个项目的列表(虽然可以添加或删除项目),位置0-12。 当首次显示包含RecyclerView的片段时,用户只能看到位置0到7(位置7只有一半可见)。 在我的适配器中,每次视图持有者绑定/绑定时都会记录(如果语法适用于此处为idk)并记录其位置。 适配器 @Override public void onBindViewHolder(final ViewHolder holder, final int position) { Log.d(TAG, “onBindViewHolder() position: ” + position); … } 从我的Log我看到0-7的位置是绑定的: 我有一个selectAll()方法,通过适配器位置获取每个ViewHolder 。 如果返回的holder不是null我使用返回的holder来更新视图以显示它被选中。 如果返回的持有者为null我调用selectOnBind()方法,该方法在该位置更新标记视图,以显示它在绑定时被选中而不是实时,因为它当前未显示: public void selectAll() { for (int i = 0; i < numberOfItemsInList; i++) { MyAdapter.ViewHolder holder = (MyAdapter.ViewHolder) mRecyclerView.findViewHolderForAdapterPosition(i); Log.d(TAG, "holder at position " + i + " […]

为DividerItemDecoration设置drawable

我正在尝试为DividerItemDecoration设置我的自定义drawable(行),但没有成功。 哪里出错了? DividerItemDecoration dividerItemDecoration = new DividerItemDecoration(getContext(), LinearLayoutManager.VERTICAL); dividerItemDecoration.setDrawable(getContext().getResources().getDrawable(R.drawable.sk_line_divider)); XML形状:

如何重叠LinearLayoutManager中的项目 – RecyclerView(如堆叠卡)

这可能与RecyclerView的项目重叠吗? 我正在尝试使用LinearLayoutManager。 我的要求与LinearLayoutManager中的要求相同,我只需要从上到下重叠内部的项目。 (如堆叠卡) 我通过使用ListView看到了一些变体 。 因此,我认为在RecyclerView中也是可能的。但是,经过一些时间的探索,我觉得要花费相当长的时间来实现自定义布局管理器并对此有相当程度的理解。(我查看了Dave的post关于构建自定义LayoutManager ) 所以,现在我想我可能只需要根据我的要求使用ListView变体,而不是处理自定义布局管理器的这么多复杂性。 但是,我只需要让里面的物品重叠。 我觉得可能还有其他方向我还没有意识到。 如果除了ListView varient和Custom Layout Manager 之外还有任何其他内容,请告诉我。 我也会在下面发表我的发现。