Articles of android recyclerview

如何在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可以被多次调用? 提前致谢

更新RecyclerView项ProgressBar而不在适配器上调用notifyItemChanged(int)

我正在尝试更新progressBar,它是其中一个RecyclerView项目的一部分。 我知道我可以用两种方式做到 方法1:通过调用notifyItemChanged(position)刷新项目行 方法2:使用LayoutMananger对象上的findViewByPosition()方法访问视图。 但不幸的是,他们都没有在我的案件中工作。 如果我使用第一个,整个项目将重新绘制,recyclerview的背景颜色为灰色,项目为白色,因此用户可以注意到整个项目刷新。 如果我尝试第二个,滚动时我会遇到问题。 我想像WhatsApp那样更新进度。 提前致谢

在Android中折叠时,如何将RecyclerView放在CollapsingToolbarLayout下面并响应工具栏?

我正在开发一个Android应用程序。 在我的应用程序中,我正在使用,CollapsingtoolbarLayout和RecyclerView。 两者都有效。 但是我在定位它们时遇到了问题。 我想要的是我想直接在Collapsing Toobar下面使用RecyclerView,我希望RecyclerView在折叠时与工具栏一起上去。 但我的代码没有像我预期的那样工作。 这就是现在发生的事情。 如您所见,回收站视图具有工具栏覆盖的固定位置。 它无法响应折叠的工具栏。 这是我的XML布局: <!– –> 在活动中,我没有配置除初始化RecyclerView和设置数据之外的任何内容。 这就是我在活动中设置RecyclerView的方法 private void setDestinationRecyclerView() { RecyclerView.LayoutManager mLayoutManager = new LinearLayoutManager(getBaseContext()); rcDestinations.setLayoutManager(mLayoutManager); rcDestinations.setItemAnimator(new DefaultItemAnimator()); regionsList = new ArrayList(); destinationsAdapter = new DestinationsAdapter(regionsList,getBaseContext()); rcDestinations.setAdapter(destinationsAdapter); //add items and notify data changed } 那么,如何在折叠时使RecyclerView对CollapsingToolbarLayout做出响应?

如何在android中实现加载更多的recyclerview

我想在Recyclerview中实现更多的加载。 这是代码。 代码来自github。 https://gist.github.com/ssinss/e06f12ef66c51252563e MainActivity代码: package com.example.tatson.bila; import android.app.ProgressDialog; import android.os.AsyncTask; import android.support.v4.widget.SwipeRefreshLayout; import android.support.v7.app.AppCompatActivity; 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.widget.Button; import android.widget.TextView; import android.widget.Toast; import com.android.volley.RequestQueue; import com.android.volley.Response; import com.android.volley.VolleyError; import com.android.volley.toolbox.JsonArrayRequest; import com.android.volley.toolbox.Volley; import com.example.tatson.bila.CardAdapter; import com.example.tatson.bila.Config; import com.example.tatson.bila.SuperHeroes; import org.json.JSONArray; import org.json.JSONException; import org.json.JSONObject; import org.w3c.dom.Text; […]

ViewPager中的Espresso Recylerview匹配多个视图

如何使用实现具有匹配多个视图的ID的RecylerView的片段来定位Viewpager? 我有一个MainActivity,它有一个Viewpager。 Viewpager有5个标签。 在这5个选项卡中,我使用RecylerViews在每个选项卡中加载图像。 RecylerView XML在不同的片段中重复使用,因此当使用Espresso访问它时,它会保持抱怨ID匹配多个视图。 我的RecylerView不加载任何文本,只加载图像,所以我甚至不能用withText(“Text here”) 。 我也不能对RecylerViews使用onData() 。 @RunWith(AndroidJUnit4.class) @LargeTest public class ExampleTest { @Rule public ActivityTestRule mActivityRule = new ActivityTestRule( MainActivity.class); Activity activity = mActivityRule.getActivity(); @Test public void ExampleMethod() { // perform a swipe onView(withId(R.id.viewpager)).perform(swipeLeft()); // try to click on one of the recycler view items. // this crashes: onView(withId(R.id.recycler_view)) .perform(RecyclerViewActions.actionOnItemAtPosition(2, […]