Articles of android recyclerview

RecyclerView的子项中的WebViews中的数据可以预加载吗?

我有一个使用LinearLayoutManager的RecyclerView,其中每个子卡都包含一个WebView。 我使用loadData()方法将数据加载到WebView中。 当我向下滚动列表时,情况正常,但是当我向下滚动到足以使上述视图得到回收时,当我向后滚动时会出现问题。 当RecyclerView重新连接上面的子节点时,它会重新加载WebView中的数据,但直到WebView出现在屏幕上时才会重新加载数据。 当WebView加载它的数据时,它会将其下面的所有孩子推下屏幕。 因此,当我向上滚动时,WebView底部缓慢地出现在屏幕上,而不是整个WebView跳到WebView顶部的屏幕上。 这是非常刺耳的,不光滑的。 有没有办法告诉适配器或布局pipe理器提前加载WebViews? 如果RecyclerView能够顺利滚动,我会对自己的应用程序感到满意,但是现在,当我向后滚动时,它几乎不可用。

Android:需要更新从微调框中select的项目更新回收视图的build议

我是新来的回收视图。 我的要求如下: – 我必须调用一个Web服务,将提供两个数组。 一个与我需要显示在列表中的数据。 为此,我正在使用RecyclerView 。 另一个arrays是状态,我在微调中显示。 这个Web服务是分页的。 我已经添加了分页,它工作正常。 – 当用户从微调框中select一些其他元素时,我必须再次进行Web服务调用,并且回收者视图数据应该改变。 目前,在分页的情况下,我从下面的页面获取更多的数据: mAccountListingsAdapter.notifyItemRangeInserted(mAccountListingsAdapter.getItemCount(), mListings.size() – 1); 而且,当我改变微调的数据时,我正在做以下工作: mListings.clear();//Clear the data set mAccountListingsAdapter.notifyDataSetChanged();//Call notify data set changed on recycler view adapter getAccountListings();//Fetch new data from the web service and display in recycler view 但是,build议不要直接在回收视图适配器上调用notifyDataSetChanged(),而应该调用特定的notifyXXX方法,以避免性能和animation问题。 所以,我怀疑,如果我正确地通知旋转工具的onItemSelected()的回收视图适配器,或者应该改变它。 PS我试着在onItemSelected下面: int size = mListings.size(); mListings.clear(); mAccountListingsAdapter.notifyItemRangeRemoved(0, size – 1); […]

在回收视图中的每个项目的视差效果?

我试图玩Parallax和得到一些奇怪的错误,想知道如果有人可以添加一些input。 我见过的唯一有效实现视差的应用程序是soundcloud。 这是非常微妙的,但每个项目都有一个图像的背景,并有滚动时的视差效果。 我已经创build了一个自定义RecyclerView来处理这个,这是我到目前为止: public class ParallaxScrollListener extends RecyclerView.OnScrollListener { private float scrollSpeed = 0.5f; @Override public void onScrolled(RecyclerView recyclerView, int dx, int dy) { super.onScrolled(recyclerView, dx, dy); LinearLayoutManager layoutManager = (LinearLayoutManager) recyclerView.getLayoutManager(); int firstVisible = layoutManager.findFirstVisibleItemPosition(); int visibleCount = Math.abs(firstVisible – layoutManager.findLastVisibleItemPosition()); Matrix imageMatrix; float tempSpeed = -100; if (dy > 0) { tempSpeed […]

Systrace里面的VerifyClass是什么意思?

我正在看我的应用程序生成的systrace ,我已经确定了一个太长的框架。 这是由于充气我的项目视图时RecyclerView的onCreateViewHolder造成的。 项目视图与ConstraintLayout一样平坦。 但是下面的systrace报告有很多VerifyClass块,每块需要VerifyClass 。 那VerifyClass块是什么意思?

RecyclerView滚动条在第一项之后跳回到顶部

我创build了一个非常基本的RecyclerView示例。 布局: <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".MyActivity"> <android.support.v7.widget.RecyclerView xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/recyclerView" android:layout_width="match_parent" android:layout_height="match_parent" android:scrollbars="vertical"/> </RelativeLayout> 活动: public class MyActivity extends Activity { RecyclerView mRecyclerView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_my); mRecyclerView = (RecyclerView) findViewById(R.id.recyclerView); mRecyclerView.setAdapter(new TestAdapter()); mRecyclerView.setLayoutManager(new LinearLayoutManager(this)); } public static class TestAdapter extends RecyclerView.Adapter<TestAdapter.ViewHolder> { @Override public ViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) […]

如何更改onClick的RecyclerView项目的viewType

我创build了一个以卡片为主要视图types的RecyclerView。 我试图实现的是,当用户点击一个项目,该项目的ViewType从卡片更改为另一个Viewtype(例如列表文字浏览放置水平滚动)。 我的代码为RecyclerView适配器如下: 在下面的一段代码中,我创build了一个枚举types的列表来跟踪recyclerview中每行的点击状态,然后我得到了我的数据集的大小,并用SHOW_PRIMARY_CONTENT为每一行初始化了我的数组列表 public class DisplayItemsAdapter extends RecyclerView.Adapter<DisplayItemsAdapter.ViewHolder> { private static ArrayList<clickedState> itemClickedState; private enum clickedState { SHOW_PRIMARY_CONTENT, SHOW_SECONDARY_CONTENT } private ArrayList<ItemData> mDataset = new ArrayList<>(); public DisplayItemsAdapter(ArrayList<ItemData> dataset) { mDataset = dataset; itemClickedState = new ArrayList<>(); for (int i = 0; i < mDataset.size(); i++) { itemClickedState.add(i, clickedState.SHOW_PRIMARY_CONTENT); } } 下面是我的ViewHolder类,它持有对我所有的子视图的引用,它实现了View.OnClickListener。 为什么它实现了View.OnClickListener,以便它可以在点击状态之间切换以相应地改变viewType。 public […]

与RecyclerView一起使用时出现毕加索图像错位问题

在我的应用程序中,我正在显示从web服务获取的文章。 那些文章有标题,形象和其他领域。 为了显示图像,我使用毕加索 。 问题 – 在滚动RecyclerView的同时,我看到图像错位。 有些项目有重复的图像。 我知道这是recyclerview重用xml项目布局,因为这是创build一个问题。 但是我认为这个问题一定有一些解决办法。 我google了这个,发现了一些post在stackoverflow,但没有帮助。 例如- 毕加索将图片加载到列表适配器中的错误图像视图中 我试过以下,但有同样的问题 – public class ArticleAdapter extends RecyclerView.Adapter<ArticleAdapter.ArticleViewHolder> { protected Activity mActivity; protected List<Article> mItems = new ArrayList<>(); private static OnEntityClickCallback mCallback; public ArticleAdapter(Activity pActivity) { mActivity = pActivity; } public void setItemClickCallback(OnEntityClickCallback pCallback) { this.mCallback = pCallback; } @Override public ArticleViewHolder onCreateViewHolder(ViewGroup […]

如何在RecyclerView中使用GridLayoutAnimation?

我试图用新的RecyclerView(使用GridLayoutManager)replace我的GridView,但它似乎不能很好地处理gridLayoutAnimation( ClassCastException: LayoutAnimationController$AnimationParameters cannot be cast to GridLayoutAnimationController$AnimationParameters )。 它使用常规的布局animation,但由于它是网格,在平板电脑上完成需要很长时间。 我试图完成的是类似于分层时序 。 如果您查看示例video,则会显示布局animation从左上angular到右下angular。 一个普通的布局animation会在一行之后执行animation行,因此在较大的网格(例如平板电脑)上花费太多的时间来完成。 我也尝试过探索ItemAnimator,但是它只会在“Do not”示例中同时在所有单元格上运行animation。 有没有一种方法可以在RecyclerView中完成这个网格布局animation? 这是gridview_layout_animation.xml: <!– replace gridLayoutAnimation with layoutAnimation and –> <!– replace column- and rowDelay with delay for RecyclerView –> <gridLayoutAnimation xmlns:android="http://schemas.android.com/apk/res/android" android:columnDelay="15%" android:rowDelay="15%" android:animation="@anim/grow_in" android:animationOrder="normal" android:direction="top_to_bottom|left_to_right" android:interpolator="@android:interpolator/linear" /> 这是animationgrow_in.xml: <set android:shareInterpolator="false" xmlns:android="http://schemas.android.com/apk/res/android"> <scale android:interpolator="@android:interpolator/decelerate_quint" android:fromXScale="0.0" android:toXScale="1.0" android:fromYScale="0.0" android:toYScale="1.0" android:pivotX="50%" […]

在Adapter.onBindViewHolder中获取CardView的宽度

我有一个post列表,其中大部分是图片(简单地说就是像G +或FB应用程序的post)。 每个post条目都有一个图像高宽比,所以我甚至可以在图像从服务器加载之前,根据它的宽度来设置图像高度,所以卡片布局在加载时不会改变。 问题是layout_width="match_parent"设置为卡片和张贴图像。 当我得到cardview的宽度时,它是零。 所以我无法计算高度。 现在我看到的唯一的解决scheme是取得父容器(RecyclerView)的宽度,并扣除所有的填充,但它看起来不是一个好的解决scheme。 有没有其他办法可以做到这一点? 这里是一个适配器代码的例子 @Override public void onBindViewHolder(ViewHolder holder, int position) { …. int width = holder.itemView.getWidth(); …. //do some calculations } 布局(没有不相关的部分) <?xml version="1.0" encoding="utf-8"?> <android.support.v7.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android" xmlns:card_view="http://schemas.android.com/apk/res-auto" android:id="@+id/card" android:layout_width="match_parent" android:layout_height="match_parent" android:descendantFocusability="blocksDescendants" android:foreground="?android:attr/selectableItemBackground" card_view:cardBackgroundColor="#ffffff" card_view:cardCornerRadius="3dp"> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="wrap_content"> <include android:id="@+id/includedPost" layout="@layout/post_details" /> </RelativeLayout> </android.support.v7.widget.CardView> includedPost: <?xml version="1.0" encoding="utf-8"?> […]

Android RecyclerView平滑滚动以查看animation的高度

我有一个RecyclerView与可扩展的子视图,当ViewGroup被点击时,它将视图的高度从0增加到测量的视图组高度,如下面的gif: 问题是:我在recyclerView上调用smoothScrollToPosition,它平滑地滚动到视图位置,但它认为当前视图高度,仍然没有展开,在上面的gif我触及回收站视图下,哪些不滚动到位置,因为视图已经可见,但是当我再次触摸(再次调用smoothscrolltoposition)它将视图滚动到正确的位置,因为视图已经展开。 有没有办法将视图滚动到屏幕的顶部,或者只是滚动以使内容可见? 对于参考:这是调用的方法膨胀的意见: collapsible_content.removeAllViews(); for(int i = 0; i < 5; i++) { View link_view = getLayoutInflater().inflate(R.layout.list_item_timeline_step_link, collapsible_content, false); TextView text = (TextView) link_view.findViewById(R.id.step_link_text); text.setText("Test"); collapsible_content.addView(link_view); } 这是我的方法来扩展: public void toggle() { collapsible_content.measure(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT); Animation a; if (mExpanded) { a = new ExpandAnimation(collapsible_content.getLayoutParams().height, 0); } else { a = new ExpandAnimation(collapsible_content.getLayoutParams().height, getMeasuredHeight()); } a.setDuration(mAnimationDuration); […]