Articles of android recyclerview

如何在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 之外还有任何其他内容,请告诉我。 我也会在下面发表我的发现。

在我现有的项目中导入CardView和RecyclerView(Android 5.0)(eclipse)

我想在我现有的项目中导入CardView和RecyclerView。 我正在使用ECLIPSE。 我在stackoverflow中读到了其他答案,但所有答案都是针对Android Studio的。 有人可以帮助我吗? 我收到的错误是:CardView无法解析为某种types。 更新:Commonwares的答案帮助我解决了这个问题。 但现在我有另一个错误。 (错误膨胀类和android.support.v7.widget.CardView)。 请有人帮帮我

片段之间animation的共享元素

我正在尝试将RecyclerView中所选项目的2个简单视图设置为新片段。 我已经查看了很多将共享元素从一个Activityanimation到另一个Activity的示例,但很少有animation将共享元素从一个Fragmentanimation到同一个Activity中的另一个Fragment的例子。 它几乎可以工作。 这是我的结构。 活动 – 使用RecyclerView的全屏Fragment1 – 带有详细信息的全屏Fragment2 当用户在Fragment1中的RecyclerView中选择一个项目时,我将Fragment1替换为具有View的Fragment2,其中包含不同位置和大小的共享元素。 要让它工作有一些技巧,你必须确保你的transitionName对于列表中的每个项都是唯一的,当然,transitionName必须与Fragment2中元素的transitionName匹配才能播放animation。 我有这个部分工作,当我选择一个项目时,2个共享视图会animation,而不是在两个活动之间进行animation时的预期。 如果我选择屏幕底部附近的项目,它会绘制View for Fragment2并为2个共享视图设置animation,就好像它们位于屏幕顶部的项目中一样。 很难解释。 这是一些照片 片段1 Fragment2 在这两个片段中我都设置了以下内容 setSharedElementEnterTransition(new ChangeBounds()); setSharedElementReturnTransition(new ChangeBounds()); setAllowEnterTransitionOverlap(true); setAllowReturnTransitionOverlap(true); 同样在他们的onCreate()中的父Activity中我设置了 getWindow().requestFeature(Window.FEATURE_CONTENT_TRANSITIONS); 我知道为什么我的共享元素animation从我的屏幕顶部开始,即使它们是从屏幕底部的选定项目开始的?

RecyclerView针对不同项目的不同itemDecoration

我在我的应用程序中使用RecyclerView并且为了我的设计需要,我需要在列表中的项目之间有不同的边距(例如:前两个项目之间的空间为16dp,第二个项目之间的空间为16dp第三项32dp等)。 我读到您可以将项目装饰添加到RecyclerView并在项目之间创建该空间。 但是这件事在所有项目之间增加了相同的余量,我希望不同的项目有不同的行为。 我的问题是,可以使用项目装饰来完成吗? 这种方法如何比改变项目(视图)的边距更好,例如, RecyclerView.Adapter的onBindViewHolder方法。 先谢谢你!

强制RecyclerView重绘Android

有没有办法重绘RecyclerView所有项目? 我有一些主题(在style.xml中),在更改主题后,我需要重绘RecyclerView 。 所以我想要一个强制为适配器的每个项目重新调用onCreateViewHolder的方法。 我尝试过了: 调用adapter.notifyDataSetChanged但不调用onCreateViewHolder 调用recyclerView.setVisibility(View.GONE) ,然后调用recyclerView.setVisibility(View.GONE) recyclerView.setVisibility(View.VISIBLE) 调用recyclerView.invalidate() 调用recyclerView.setAdapter(null)然后再调用recyclerView.setAdapter(null) recyclerView.setAdapter(adapter) 。 这适用于90%的项目。 只有90%的商品会获得新款式,但有些商品会采用旧款式 我提到RecyclerView附加到Activity,而不是Fragment。

Android:滚动后RecyclerView内容搞砸了

我正在使用RecyclerView显示标记列表,并且值的每个标记都显示为CardView。 但是,在向下滚动RecyclerView并向后滚动之后,卡片的某些内容会丢失,如下面的两个屏幕截图所示。 滚动后,红色矩形中的内容将丢失。 在滚动之前; 在滚动之后; 我想知道它是否是RecyclerView的一个错误,并在Googling之后找不到解决方案。 除标题外,所有观点都是看不见的,它们的可见性取决于标记的价值。 有谁知道为什么会这样?