Articles of android recyclerview

当列数发生变化时,animation回收器查看网格

我正在使用带有GridLayoutManager的RecyclerView 。 用户可以在2到4之间切换跨度计数,这将导致animation将每个单元格的内置翻译animation运行到其新位置。 我到目前为止使用的代码是: TransitionManager.beginDelayedTransition(moviesGridRecycler); gridLayoutManager.setSpanCount(NEW_SPAN_COUNT); adapter.notifyDataSetChanged(); 这对我来说一直很好,但现在我需要为每个跨度计数设置不同的布局。 为了支持这一点,我在RecyclerView有2种视图types,并且由于在移动到新的跨度计数时视图types已更改,因此RecyclerView无法看到它是“相同”内容,并且未运行默认的转换animation。 如果我启用布局转换,我会获得视图输入animation,而不是查看位置更改animation。 两个跨度计数的单元格视图的宽度和高度为match_parent和wrap_content 。 作为替代方案,我尝试将所有新视图types放在一起,只有一种视图types。 我有一个FrameLayout ,它保存两个跨度计数的视图。 在onBindViewHolder() ,我只是切换子视图的可见性。 这也导致没有animation。 我跟着这个post和这个 ,但无法解决我的问题。 完整代码: class ItemFragment : Fragment() { private var spanCount = 2 lateinit var recyclerView: RecyclerView lateinit var button: Button override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? { val view = inflater.inflate(R.layout.fragment_item_list, container, false) […]

RecyclerView仅在向下和向上滚动时刷新项目

我正在使用电影项目进行简单的回收查看。 当我尝试添加新项目时,它们不会立即显示在recyclerview中。 出于某种原因,我必须向下滚动以便第一个项目消失,然后再次向上显示要显示的新项目(它在索引0处添加)。 适配器: public class MovieCardAdapter extends RecyclerView.Adapter { List movieList; public MovieCardAdapter(final List movieList) { this.movieList = movieList; } public void addItem(int position, final Movie movie){ movieList.add(position,movie); notifyItemInserted(position); } public void removeItem(final Movie movie){ final int indexOf = movieList.indexOf(movie); movieList.remove(movie); notifyItemRemoved(indexOf); } public void updateItems(final List items){ movieList = items; notifyDataSetChanged(); } @Override […]

如何在另一个recycleview适配器下的recycleview适配器?

我有一个RecyclerView 。 它有一个自定义布局,在自定义布局内是另一个RecyclerView 。 当我通知回收站视图项目已被删除时,我的主回收站视图已更新,但我的自定义视图回收视图未收到通知。 SwipeDismissRecyclerViewTouchListener listener = new SwipeDismissRecyclerViewTouchListener.Builder( recyclerView, new SwipeDismissRecyclerViewTouchListener.DismissCallbacks() { @Override public boolean canDismiss(int position) { return true; } @Override public void onDismiss(View view) { // Do what you want when dismiss int id = recyclerView.getChildAdapterPosition(view); databaseHelper.deleteSingleItem(cartAdapter.cartItemName.get(id)); Log.e(TAG, “onDismiss: ” + subdata.get(id) + ” ” + data.get(id)); subdataprice.remove(id); subdata.remove(id); addonlist.remove(id); price.remove(id); […]

如何在Android中的recyclerView中处理多个布局点击

在我们的应用程序中,我们有消息列表。 我们正在切换到RecyclerView 。 我们的消息可以包括文本,图像。 示例消息可能如下所示。 要处理点击,请使用此类: public class RecyclerViewItemClickListener implement RecyclerView.OnItemTouchListener { public static interface OnItemClickListener { public void onItemClick(View view, int position); public void onItemLongClick(View view, int position); } private OnItemClickListener mListener; private GestureDetector mGestureDetector; public RecyclerViewItemClickListener(Context context, final RecyclerView recyclerView, OnItemClickListener listener) { mListener = listener; mGestureDetector = new GestureDetector(context, new GestureDetector.SimpleOnGestureListener() { […]

RecyclerView仅在滚动时更新

我有一个带有适配器的RecyclerView的布局: public class SimpleRecyclerAdapter extends RecyclerView.Adapter { protected List data = new ArrayList(); public List getData() { return data; } } 我更新它的适配器,如: public void udpdateFromJson( JSONObject payload ) { JSONArray msgs = payload.optJSONArray( “messages” ); for( int ix = 0; null != msgs && ix < msgs.length(); ix++ ){ JSONObject o = msgs.optJSONObject( ix ); […]

使用StaggeredGridLayoutManager时停止移动物品

我正在android中使用recyclelerview和staggredGridLayoutManager。 问题是,有时当滚动项目移动到适合屏幕时。 通常情况下,没什么可担心的,但在我的情况下它会弄乱一切! 那么无论如何要阻止这种行为? 不只是animation。 整个项目重新整理东西。 谢谢

一起滚动多个水平RecyclerView

我正在创建一个EPG视图,我有多个水平的RecyclerView (作为电视节目)封装在LinearLayout中。 当我滚动其中一个RecyclerView时,我希望其余的视图一起滚动。 @Override public void onActivityCreated(Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); layoutContent.setWeightSum(epg.getChannels().size()); //prepare recycler views and add into layoutContent based on epg channels for(EPG.Channel ch : epg.getChannels()){ AppLog.error(TAG, “Creating RecyclerView for: ” + ch.getDisplayName()); //create new recycler view final RecyclerView rv = new RecyclerView(layoutContent.getContext()); lstRecyclerViews.add(rv); //set layout manager rv.setLayoutManager(new LinearLayoutManager(layoutContent.getContext(), LinearLayoutManager.HORIZONTAL, false)); //create adapter rv.setAdapter(new MyAdapter(ch.getPrograms())); […]

在RecyclerView中更新ProgressBar

我有一个RecyclerView。 其中,项目具有标准布局 – 一个TextView和一个ProgressBar。 项目在运行时添加到recyclerview。 每当添加一个Item时,都会启动一个更新ProgressBar的AsyncTask。 AsynTask保存了RecyclerView Adapter对ProgressBar对象的引用。 当回收器视图中的项目太多时,会发生此问题。 我知道RecyclerView会回收任何旧视图,因此想要了解至少进度条的方法。 实现这个的理想方法是什么? 以下是适配器的摘录 public class RecViewAdapter extends RecyclerView.Adapter { Context mContext; List mRunns; static ExecutorService mExec; static HashSet mProcessed = new HashSet(); public RecViewAdapter(Context context, List runns) { mContext = context; mRunns = runns; mExec = Executors.newFixedThreadPool(1); } @Override public ViewHolder onCreateViewHolder(ViewGroup viewGroup, int viewType) { […]

RecyclerView LayoutManager findViewByPosition返回null

我对获得RecyclerView第一项物品大小的正确和第一时间感兴趣? 我试过用: recyclerView.setLayoutManager(new GridLayoutManager(context, 2)); recyclerView.setAdapter(new MyDymmyGridRecyclerAdapter(context)); recyclerView.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() { @Override public void onGlobalLayout() { recyclerView.getViewTreeObserver().removeGlobalOnLayoutListener(this); View firstRecyclerViewItem = recyclerView.getLayoutManager().findViewByPosition(0); // firstRecyclerViewItem is null here } }); 但此时它返回null。

Android selectableItemBackground长按没有发光效果

我想在Android应用程序中使用RecyclerView。 我将RecyclerView示例项目导入Android Studio,它运行正常。 我想让回收者视图中的项目在用户长时间按下时进行视觉反应。 为此,我将视图的背景设置为selectableItemBackground 。 我做了这些修改: 在text_row_item.xml中,我在FrameLayout标记上添加了这一行: android:background=”?android:attr/selectableItemBackground” 在CustomAdapter.java中,我在FrameLayout上添加了一个长按监听器: v.setOnLongClickListener(new View.OnLongClickListener() { @Override public boolean onLongClick(View view) { Log.d(TAG, “Element ” + getPosition() + ” long clicked.”); return true; } }); 如果我在Lollipop仿真器上运行修改后的样本,当我长按回收器视图中的项目时,我会得到很好的涟漪效果。 但是如果我在KitKat模拟器上运行应用程序,我就无法获得KitKat附带的发光效果。 当我长按它时,列表中的项目变暗,并且长按聆听器确实会运行,但我预计随着长按发生,颜色会发光。 这是我正在发布的一个gif: 为什么selectableItemBackground不在KitKat上运行发光效果? 如何让它在KitKat和Lollipop上运行?