Articles of android recyclerview

RecyclerView行为 – 打开/关闭键盘时变为空

我已经使用SearchView和Filterable实现了RecyclerView ; 来自v7所有课程。 现在有这种行为很烦人。 无论何时启动或关闭键盘, RecyclerView的内容都会变为空白。 计数仍然正确,但视图为空。 我的猜测,它与Layout大小的变化有关。 这种行为是正常还是出了什么问题? 怎么处理呢? 我可以显示代码,但不太清楚哪个部分是相关的,所以告诉我在这里可以添加什么?

使用JsonArray vs ArrayList作为RecyclerView Adapter的数据集

我已经使用ArrayList和JsonArray作为适配器中的数据集。 我发现的一个主要区别是适配器中本地数据的数据集更改未反映在JsonArray的调用类中。 我想知道哪一个更好,我的观察是正确的。 此外,如果我的数据集涉及从Web服务中提取数据(这给我提供Json表单数据),那么我将其更改为ArrayList 会更好。

android recyclerview notifyItemInsertedanimation

我不知道为什么会发生这种情况,但调用notifyItemInserted(0) (仅限第一个位置)将不会为视图设置animation。 在其他位置一切正常。 在这种情况下工作的animation: friendsList.remove(positionFriend); friendsList.add(1, newFriend); notifyItemInserted(1); notifyItemRemoved(positionFriend+1); animation在这种情况下不起作用: friendsList.remove(positionFriend); friendsList.add(0, newFriend); notifyItemInserted(0); notifyItemRemoved(positionFriend+1); 预期行为:元素插入顶部并插入animation。 发生了什么:没有显示插入animation,实际上我认为’视觉’,第一个元素消失,移动animation发生。

为什么CardView和RecyclerView需要minSdkVersion L?

当使用新的Android小部件CardView和RecyclerView我注意到它们需要minSdkVersion L 因此,如果您的项目使用例如minSdkVersion 14 ,您将收到如下错误: > Manifest merger failed : uses-sdk:minSdkVersion 14 cannot be smaller than version L declared in library com.android.support:cardview-v7:21.0.0-rc1 我知道有一种解决方法告诉Gradle忽略库的minSdkVersion并使用项目中的一个。 但是,如果库需要Android L,是否可以安全地忽略此错误并使用旧版本? 为什么Google决定不让它们与pre-L版本一起使用? 我认为这是因为它不是最终版本?

如何在RecyclerView上滑动删除?

我在这里有一个历史页面,显示用户已接受或发布的请求。 我能够成功地为用户添加一个按钮来删除用户拥有的所有历史记录。 现在我希望用户能够通过滑动一次删除一个历史记录。 HistoryFragment.java RecyclerView rView; Button clear; DatabaseReference dRef; LinearLayoutManager llm; String id; View myView; @Nullable @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { myView = inflater.inflate(R.layout.history, container, false); FirebaseUser fu = FirebaseAuth.getInstance().getCurrentUser(); id = fu.getUid(); dRef = FirebaseDatabase.getInstance().getReference().child(“History”+id); clear = (Button) myView.findViewById(R.id.clear); rView = (RecyclerView) myView.findViewById(R.id.history_list); rView.setHasFixedSize(true); llm = new LinearLayoutManager(getActivity()); […]

RecyclerView.Adapter的onCreateViewHolder方法中的parent.getContext

我有一个附加到我的MainActivity的自定义片段。 片段的布局文件包含recyclerview小部件。 fragment_main.xml: 在我的RecyclerView.Adapter中,onCreateViewHolder方法如下所示: @Override public MyAdapter.MyHolder onCreateViewHolder(ViewGroup parent, int viewType) { View view = LayoutInflater.from(parent.getContext()).inflate(R.layout .list_item, parent, false); return new MyHolder(view); } 我的问题是关于此方法的Viewgroup父级。 这个ViewGroup是我的RecyclerView小部件,但为什么给我parent.getContext引用我的MainActivity而不是我的片段?

RecyclerView:如何在顶部模拟ListView的绘图选择器?

我想创建一个RecyclerView ,在其项目之上绘制一个选择器。 它应该在项目的顶部呈现,这意味着我不能简单地将StateListDrawable设置为项目背景。 我对压制状态特别感兴趣,即如果(并且仅当)按下某个项目,应该绘制一些东西。 RecyclerView.ItemDecoration能够绘制RecyclerView项目。 这是我到目前为止所尝试的: public final class ItemPressedDecoration extends RecyclerView.ItemDecoration { private final Rect rect = new Rect(); @Override public void onDrawOver(Canvas c, RecyclerView parent, RecyclerView.State state) { final int count = parent.getChildCount(); for (int index = 0; index < count; index++) { final View child = parent.getChildAt(index); if (child.isPressed()) { drawOverlay(c, child); […]

如何从RecyclerView.Adapter访问LayoutManager以获取scrollToPosition?

我通过为页眉和页脚添加单独的布局来自定义RecyclerView 。 我创建了常量来确定适配器类中的页眉,页脚和列表项的属性。 我还创建了一个ViewHolder模式,并根据视图types指定要显示的布局。 我通过覆盖getItemViewType方法将头部固定在第0个位置和页脚最后位置的页脚。 我想使页脚元素可单击,所以我分配一个setOnClickListener(new View.OnClickListener())并覆盖onClick(view: View) 我的目标是单击页脚和scrollToPosition 0或1(0 =标题,1 =第一个项目元素)。 那是MyAdapter的定义: class MyAdapter(context: Context, data: Array[String]) extends RecyclerView.Adapter[RecyclerView.ViewHolder] … override def onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int): Unit = holder match { … case holder:FooterViewHolder => holder.backToTop.setOnClickListener(new View.OnClickListener() { override def onClick (view: View) { backToTop(???) Toast.makeText (context, “Clicked Footer”, Toast.LENGTH_SHORT).show() } }) … } […]

通过AdapterPosition获取RecyclerView的视图

我有一个带有video预览的RecyclerView。 当用户滚动时,video应自动在用户可见的recyclerView项目上播放(当滚动状态为IDLE时)。 所以我编写了一个自定义onScrollListener,它将用户可见的位置作为数组传递给方法startVideosOn(int[] positions) 。 但问题是当我想通过位置获取View时(位置等于适配器位置)。 当我尝试使用linearLayoutManager.getChildAt(index)时,在显示第3个项目时我得到null ,因为RecyclerView只有2个子项,这些子项将被回收。 那么如何通过适配器位置设置获取RecyclerView的View ? 编辑,这是OnScrollListener: public abstract class AutoPlayRecyclerOnScrollListener extends RecyclerView.OnScrollListener { LinearLayoutManager linearLayoutManager; public AutoPlayRecyclerOnScrollListener(LinearLayoutManager linearLayoutManager) { this.linearLayoutManager = linearLayoutManager; } @Override public void onScrollStateChanged(RecyclerView recyclerView, int newState) { super.onScrollStateChanged(recyclerView, newState); if (newState == AbsListView.OnScrollListener.SCROLL_STATE_IDLE) { int firstVisibleItemPosition = linearLayoutManager.findFirstVisibleItemPosition(); int lastVisibleItemPosition = linearLayoutManager.findLastVisibleItemPosition(); if (firstVisibleItemPosition != -1 […]

不要在RecyclerView中回收特定的视图types

我有一个重用视图的循环器视图,我的问题是一个视图包含ViewPager,如果recyclelerview的适配器重用视图所在的视图,那么viewpager会发生exception。 但是,onCreateViewHolder方法仅在第一次调用时才会被调用。 我怎么能避免这种行为,并实现onCreateViewHolder可以被多次调用? 提前致谢