Articles of android recyclerview

在两个RecyclerView之间拖放

是否可以在两个不同的RecyclerView之间进行拖放等function? 我在RecyclerViewfind了用于拖放的库 。 请帮我改进这个function。

在recyclerview中使用textureview播放video

我正在尝试使用像Vine或Instagram应用程序这样的video实现列表。 当列表项显示或完全可见时,他们播放video播放的位置,并且当列表项被隐藏时video暂停。 我正在使用带有媒体播放器的textureview从url播放video,并将其作为listler项目添加到recyclelerview中。 以下是我的代码。 VideosAdapter类: public class VideosAdapter extends RecyclerView.Adapter { Context context; private ArrayList urls; public static class ViewHolder extends RecyclerView.ViewHolder { public LinearLayout layout; public TextView textView; public ViewHolder(View v) { super(v); layout = (LinearLayout) v.findViewById(R.id.linearLayout); textView = (TextView) v.findViewById(R.id.textView); } } public VideosAdapter(Context context, ArrayList urls) { this.context = context; this.urls = […]

RecyclerView中的滑动和OnClick事件

我正在尝试实现一个轻扫以解除RecyclerView中的操作,但是当我在ViewHolder中的任何View上设置OnClickListener时,它会覆盖该视图上的所有OnTouch事件。 我可以放弃OnClickListener并处理TouchListener中的所有点击,但如果我在RecycleView的子视图中有多个按钮,那将是很多代码,这看起来不是正确的方法。 在我的RecyleView中我设置了Swipe以解除侦听器( 类似于此 ): setOnTouchListener(touchListener); setOnScrollListener(touchListener.makeScrollListener()); 它在ListView中工作,但在RecycleView中,OnClickListener阻止OnTouchListner事件。 ViewHolder视图的布局示例。 在RecyclerView.Adapter中充气: @Override public ViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) { View v = mInflater.inflate(R.layout.push_card_view_compat, viewGroup, false); return new ViewHolder(v, onClickListener, onKeepListener); } ViewHolder: public ViewHolder(final View itemView, final OnViewHolderClickListener onClickListener, final OnKeepListener onKeepListener) { super(itemView); keepButton = (ImageView) itemView.findViewById(R.id.keep_icon); itemView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) […]

如何在回收器视图中删除animation时隐藏分隔符

RecyclerView默认情况下会带有一个很好的删除animation,只要你setHasStableIds(true)并在getItemId上提供正确的实现。 最近,我通过https://stackoverflow.com/a/27037230/72437将分隔符添加到RecyclerView 结果如下 https://youtu.be/c81OsFAL3zY (为了在删除animation播放时使分隔符更加明显,我暂时将RecyclerView背景更改为红色) 当播放删除animation时,分隔符仍然可见。 但是,如果我查看GMail示例,当播放删除animation时,分隔线不再可见。 它们被覆盖在纯色区域。 我可以知道,当删除animation播放时,如何通过不显示分隔线来实现与GMail相同的效果?

RecyclerView问答

我正在创建一个Q&A,其中每个问题都是一张卡片。 答案开始显示第一行,但当点击它时,它应该展开以显示完整的答案。 当答案扩展/折叠时,RecyclerView的其余部分应设置animation以为扩展或折叠腾出空间,以避免显示空白区域。 我观看了有关RecyclerViewanimation的演讲,并且相信我想要一个自定义的ItemAnimator,我在其中覆盖animateChange。 那时我应该创建一个ObjectAnimator来animationView的LayoutParams的高度。 不幸的是,我很难将它们捆绑在一起。 当重写canReuseUpdatedViewHolder时我也返回true,因此我们重用相同的viewholder。 @Override public boolean canReuseUpdatedViewHolder(RecyclerView.ViewHolder viewHolder) { return true; } @Override public boolean animateChange(@NonNull RecyclerView.ViewHolder oldHolder, @NonNull final RecyclerView.ViewHolder newHolder, @NonNull ItemHolderInfo preInfo, @NonNull ItemHolderInfo postInfo) { Log.d(“test”, “Run custom animation.”); final ColorsAdapter.ColorViewHolder holder = (ColorsAdapter.ColorViewHolder) newHolder; FrameLayout.LayoutParams params = (FrameLayout.LayoutParams) holder.tvColor.getLayoutParams(); ObjectAnimator halfSize = ObjectAnimator.ofInt(holder.tvColor.getLayoutParams(), “height”, params.height, 0); […]

RecyclerView和适配器数据更新

对于了解其机制或愿意深入了解源代码的人来说,这是一个关于RecyclerView内部行为的问题。 我想通过引用源代码来支持答案。 原始问题 (向下滚动到’换句话说’以获得更集中的问题) 我需要了解notify* actions(例如, notifyItemInserted() )是如何入队的。 想象一下,我有一个由此列表备份的适配器: ArrayList list = Arrays.asList(“one”, “three”, “four”); 我想添加zero和two值,缺少值。 例1 list.add(1, “two”); // notify the view adapter.notifyItemInserted(1); // Seconds later, I go on with zero list.add(0, “zero”); // notify the view adapter.notifyItemInserted(0); 这非常简单明了,没什么好说的。 例2 但是,如果这两个动作彼此非常接近,并且两者之间没有布局传递怎么办? list.add(1, “two”); list.add(0, “zero”); 我现在应该怎么做? adapter.notifyItemInserted(1); adapter.notifyItemInserted(0); 或者可能 adapter.notifyItemInserted(2); adapter.notifyItemInserted(0); ? 从适配器的角度来看,列表立即从one, three, […]

如何使用LinearLayoutManager实现可扩展项目(随Android L一起推出)

RecyclerView已经与Android L一起推出,是AppCompat v7库的一部分。 然后我决定使用这个全新的RecyclerView更新我的应用程序以替换我的ListView 。 为此,在为RecyclerView设置LayoutManager ,我使用的是LinearLayoutManager ,它工作正常。 这是很难的事情:当我想将ExpandableListView更改为RecyclerView 。 由于谷歌还没有创建“ ExpandableLayoutManager ”,这非常棘手,我无法做到这一点。 文档提到了孩子,但它似乎是RecyclerView的根视图中的孩子而不是孩子自己。 有人有解决方法或一些线索吗? 或者至少有一些信息,比如从哪里开始,以便我可以实现自己的LayoutManager 。

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 […]