Articles of android recyclerview

GridLayoutManager – 列宽包装自己的最大的孩子

我在HorizontalScrollView里面有一个RecyclerView ,我希望它使用一个GridLayoutManager 。 这是好的,但有一件事仍然困扰着我,每列的宽度是相同的(根据我认为最大的单元格宽度?)。 是否有可能包装的列的宽度匹配此特定列的最大单元格? 它应该看起来像这样: 橙色部分是电池片所采取的部分。 编辑 我们要求我澄清我的期望。 一个例子比单词好,在这里你可以看到一个带有GridLayoutManager的RecyclerView截图。 每个项目都是一个简单的TextView,包含10到40个字符之间的随机文本。 RecyclerView位于前面所述的Horizo​​ntalScrollView内部。 我们可以看到每个列都有相同的宽度,尽pipe这个列中没有项目可以满足整个宽度。 我想要的是去除那些无用的空白空间,并且有不同大小的列,每列都与自己最大的孩子的宽度相匹配。 如果你想testing这种行为,你可以克隆我上传到Github的回购: https : //github.com/ShargotthDev/TestGrid 如问,这是我的XML布局(非常基本): <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:layout_width="match_parent" android:layout_height="match_parent"> <HorizontalScrollView android:id="@+id/gameplay_hotizontalScroll_ScrollView" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_marginTop="70dp"> <android.support.v7.widget.RecyclerView android:layout_width="wrap_content" android:layout_height="match_parent" android:id="@+id/recycler_view" /> </HorizontalScrollView> </RelativeLayout> 编辑2 我应该提到,一些单元格的span大小可能大于1,LayoutManager应该是垂直的,这样这些单元格会在水平方向而不是垂直方向占据更多的位置(不知道自己是否可以理解)。 谢谢你的时间 !

如何在recyclerview viewholder中处理很多不同的视图types

如果我有50种观点呢? 我的适配器中应该有50个静态内部类吗? 根据这个答案 ,是的。 我的第一个想法是把每个视图的内部类转换成一个单独的公共类,但是它们必须是静态的。 那么把每个封装成一个公共类,使内部类是静态的? 有没有更好的select? 编辑:代码示例:所以这将是一个很好的解决scheme? 这不也杀死性能? public class MainViewHolder extends DragSortAdapter.ViewHolder implements View.OnClickListener, View.OnLongClickListener { View container; TextView title; //called in onCreateViewHolder in adapter public MainViewHolder(DragSortAdapter adapter, View itemView) { super(adapter, itemView); container = itemView.findViewById(R.id.card_root); title = container.findViewById(R.id.text); } //called by onBindViewHolder in adapter public void setData(Data data) { title.setText(data.title); } } […]

方向改变后,Android反向共享元素转换?

对于共享元素转换,我正在关注这个 github项目。 它有2个屏幕 – 一个与recyclerview有卡数量和第二个细节屏幕。 正如预期的那样,它展现了imageview&textview从recyclerview项目到详细的屏幕和背面的逆向转换的元素转换。 但是,如果用户在细节屏幕上改变方向,然后按下返回button,则反转过渡animation不起作用。 在2:49到2:57之间查看这个video帧,即使在方向改变之后,似乎也是可能的。 任何想法呢? 编辑: 请查看此video以获得更好的理解。

如何在Android中使用RecyclerView的setItemChecked(position,true)?

我正在开发一个Material Design Navigation Drawer。 我创build了一个新的类RecyclerItemClickListener implements RecyclerView.OnItemTouchListener在其中RecyclerItemClickListener implements RecyclerView.OnItemTouchListener来处理用户对列表项的点击。 我在MainActivity类的onCreate方法中使用这种方法: mRecyclerView.addOnItemTouchListener( new RecyclerItemClickListener(this, mRecyclerView, new RecyclerItemClickListener.OnItemClickListener() { @Override public void onItemClick(View view, int position) {// do whatever if(position!=0){ setItemChecked(position, true); setSelectable(true); boolean isSelected = view.isSelected(); view.setActivated(isSelected); selectItem(position); } } @Override public void onItemLongClick(View view, int position){ // … } }) ); 我从这个博客文章的基础代码: RecyclerView第二部分,但它没有完成工作,对我来说,我怎么能得到它的工作并不清楚。 我也检查了这个看似简单的解决scheme: Innodroid […]

用RecyclerView自定义警报对话框

我正在使用RecyclerView列出一些文本,现在我想这样做,当用户点击文本时popup一个自定义的警报对话框。 我已经试过这个到目前为止,但得到一个NullPointerException; 这里有什么可能是错的? public class CBAdapter extends RecyclerView.Adapter<CBAdapter.ViewHolder> { List<AdapterData> mItems; public CBAdapter() { super(); mItems = new ArrayList<>(); AdapterData data = new AdapterData(); data.setTextOne("Many Bows"); mItems.add(data); data = new AdapterData(); data.setTextOne("Pardon"); mItems.add(data); data = new AdapterData(); data.setTextOne("Fall To Knees & Beg"); mItems.add(data); data = new AdapterData(); data.setTextOne("Backflips"); mItems.add(data); } @Override public ViewHolder onCreateViewHolder(ViewGroup viewGroup, […]

RecyclerView.ViewHolder总是必须是一个内部类吗?

我有两个RecyclerView.Adapter使用完全相同的RecyclerView.ViewHolder作为内部类。 我想摆脱代码重复,并使这些ViewHolder免费,单独的类,所以现在全新的类可以用于任何RecyclerView.Adapter s。 但是,我遇到了很多麻烦,例如访问适配器对象的困难。 getAdapterPosition()总是返回-1 。 所以我改变了主意,做了一个由这些适配器扩展的超级RecyclerView.Adapter类,并将ViewHolder放在超类中,以便这些适配器可以从子类中使用它。 但是我想知道ViewHolder是否必须是内部类。 这让我很烦恼。 请不要指教我结合适配器类,他们是完全不同的ViewHolder只是一个特殊的viewType可以出现在任何RecyclerView 我正在等待你的更好的方法,让我感觉更好。 问候。

RecyclerView中的共享元素转换

我试图在RecyclerView上使用共享元素转换,但它似乎不工作。 这是我使用makeSceneTransitionAnimation()适配器的一部分: public void onBindViewHolder(final BookViewHolder holder, final int position) { holder.itemView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { Intent intent = new Intent(context, DetailsActivity.class); ActivityOptionsCompat optionsCompat = ActivityOptionsCompat.makeSceneTransitionAnimation((Activity)context , holder.smallThumbnail, "thumbnailTransition"); context.startActivity(intent, optionsCompat.toBundle()); } } }

android -RecyclerView在kitkat中

因为RecyclerView SRC在android.support.v7.widget.RecyclerView中,只要我从支持库(或谷歌播放服务)引用这个包,我可以使用套件kat和果冻豆中的recyclerView?

共享元素转换没有预期的行为

我实现了从RecyclerView中的图像到新Fragment中的图像之间的共享元素转换。 RecyclerView被托pipe在一个Activity中的一个片段中,目标片段被托pipe在另一个Activity中。 当我点击我的图片时,转换就像预期的那样发生,我得到了我的片段。 但是当我点击后退button时,转换正试图将我的图像放在我的RecyclerView的第一个位置,而当前显示的图像不一定是第一个。 从这种情况出发,我认为是因为它是一个图像列表,我在里面设置了一个转换名称,可能是因为所有的图像都有相同的转换名,这个过程是混乱的,只是得到第一个图像名称。 所以也许我应该dynamic地给每个人一个不同的过渡名称。 我也为目标图像设置了相同的名称,并在每次select新图像时重置它。 但它仍然无法正常工作。 任何人都可以帮助我吗? 这里是我的onItemClickListener中的代码: mAdapter.setOnItemClickListener(new RssItemAdapter.OnItemCLickListener(){ @Override public void onItemClick(View view, int position) { final RssItem item = mAdapter.getItem(position); final RssElementIntent intent = new RssElementIntent(getActivity(), item, position); // mRootView is the view of the fragment final ImageView image = (ImageView) mRootView.findViewById(R.id.rss_element_image); image.setTransitionName(getString(R.string.transition_name_rss_feed_picture) + position); ActivityOptionsCompat options = ActivityOptionsCompat.makeSceneTransitionAnimation( getActivity(), […]

查找RecyclerView中第一个可见项的顶部偏移量

我有一个RecyclerView + LinearLayoutManger正在使用一个适配器持有聊天消息。 我将聊天消息的数量限制在最近的100个。 这个问题是,当我删除旧的聊天,回收站查看聊天的滚动位置改变,因为索引0被删除。 我开始写下面的代码: int firstVisiblePosition = layoutManager.findFirstVisibleItemPosition(); View v = layoutManager.getChildAt(firstVisiblePosition); if (firstVisiblePosition > 0 && v != null) { int offsetTop = //need to get the view offset here; chatAdapter.notifyDataSetChanged(); if (firstVisiblePosition – 1 >= 0 && chatAdapter.getItemCount() > 0) { layoutManager.scrollToPositionWithOffset(firstVisiblePosition – 1, offsetTop); } } 我认为这会很容易得到第一个可见的项目位置的可见偏移量。 防爆。 如果第一个可见视图是300dp,但只有最后200dp可见,我想获得100偏移量。 这样我可以使用scrollToPositionWithOffset(firstVisiblePosition […]