我的活动中有一个片段,其结构如下:
<android.support.v7.widget.RecyclerView android:id="@+id/cafeRecyclerView"
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
它只有一个回收视图。它有一个适配器,其代码如下:
public class InfinityFragmentRecyclerAdapter extends RecyclerView.Adapter implements HasDatabase
{
protected JsonDatabase jsonDatabase = new JsonDatabase();
protected Context mContext;
protected int arrangeMode;
public InfinityFragmentRecyclerAdapter(Context context, int viewMode)
{
mContext = context;
arrangeMode = viewMode;
}
@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup viewGroup, int i)
{
View view;
if (arrangeMode == SupportsGridAndListArrangement.GRID_VIEW)
{
view = LayoutInflater.from(viewGroup.getContext()).inflate
(R.layout.grid_advertisement_layout, null);
}
else
{
view = LayoutInflater.from(viewGroup.getContext()).inflate
(R.layout.list_advertisement_layout, null);
}
return new ItemHolder(view, mContext, arrangeMode);
}
@Override
public void onBindViewHolder(RecyclerView.ViewHolder viewHolder, int i)
{
AdItemPassiveDataSet adItemPassiveDataSet = (AdItemPassiveDataSet) jsonDatabase.getDataSetAt(i);
Picasso.with(mContext).load(adItemPassiveDataSet.getItemThumbnailAddress()).into
(((ItemHolder) viewHolder).imageView);
((ItemHolder) viewHolder).adID = adItemPassiveDataSet.getItemID();
((ItemHolder) viewHolder).userID = adItemPassiveDataSet.getUserID();
((ItemHolder) viewHolder).userRole = adItemPassiveDataSet.getUserRole();
((ItemHolder) viewHolder).price.setText(adItemPassiveDataSet.getItemPrice(), false);
((ItemHolder) viewHolder).title.setText(adItemPassiveDataSet.getItemTitle(), false);
((ItemHolder) viewHolder).state.setText(adItemPassiveDataSet.getItemState(), false);
((ItemHolder) viewHolder).date.setText(adItemPassiveDataSet.getItemTime(), false);
if (arrangeMode == SupportsGridAndListArrangement.LIST_VIEW)
{
((ItemHolder) viewHolder).description.setText(adItemPassiveDataSet.getItemDescription());
StaggeredGridLayoutManager.LayoutParams layoutParams =
new StaggeredGridLayoutManager.LayoutParams
(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT);
layoutParams.setFullSpan(true);
viewHolder.itemView.setLayoutParams(layoutParams);
}
}
@Override
public int getItemCount()
{
if (jsonDatabase != null)
{
return jsonDatabase.getCount();
}
else
{
return 0;
}
}
@Override
public JsonDatabase getDatabase()
{
return jsonDatabase;
}
public void append(Object newJsonDatabase)
{
int currentCount = 0;
if (jsonDatabase != null)
{
currentCount = jsonDatabase.getCount();
}
int newCount = ((JsonDatabase) newJsonDatabase).getCount();
jsonDatabase.appendAtEnd((JsonDatabase) newJsonDatabase);
for (int i = currentCount; i < (currentCount + newCount); i++)
{
notifyItemInserted(i);
}
}
}
我还以这种方式设置我的片段:
recyclerView = (RecyclerView) findViewById(R.id.cafeRecyclerView);
recyclerViewAdapter = new InfinityFragmentRecyclerAdapter(this, SupportsGridAndListArrangement.GRID_VIEW);
StaggeredGridLayoutManager staggeredGridLayoutManager = new StaggeredGridLayoutManager(4, StaggeredGridLayoutManager.VERTICAL);
recyclerView.setLayoutManager(staggeredGridLayoutManager);
recyclerView.setAdapter(recyclerViewAdapter);
每次我从服务器接收到新数据时,我都会通过以下方式将它们添加到cardwiew
s中的RecyclerView:
recyclerViewAdapter.append(newJsonDatabase);
每件事都很好!我可以下载数据,将它们添加到回收者视图等等,但问题是回收者视图不流畅滚动。我真的很困惑。有什么想法吗?任何帮助将不胜感激。
尝试使用notifyItemRangeInserted()而不是notifyItemInserted()
如果我理解正确,您的代码应该是这样的
notifyItemInserted(currentCount, currentCount + newCount);
在其他回收器视图中有一个回收器视图。两者都需要垂直滚动。外部回收器视图滚动正常,但内部回收器视图滚动不正常。 这是代码: ViewAdapter如下: 我尝试了以下两种回收商观点,但都无法解决问题 也尝试了这个:
我在我的活动中实现了一个视图寻呼机,在滚动时,将一组数据加载到适配器并将它们显示在列表视图中。一切正常,但我似乎无法找出如何使其更有效,因为滚动时,视图会冻结,但例如在GMAIL应用程序中,当在电子邮件之间滚动时,滚动是如此平滑。 下面是我正在使用的代码: 活动: 创建时 页面适配器: PagechAngelistener:
我正在使用下面的代码创建一个回收器视图。recyclerview有一个网格布局管理器,其项计数最多为每行2个。 不幸的是,我嵌套在ConstraintLayout中的回收器视图根本没有滚动。我错过了什么?约束布局是否支持相同的?
我刚开始在firebase工作。我设法上传了文本和图像,但是,我无法检索要显示在回收器视图中的图像,只能检索文本。我用的是毕加索依赖。我已经包括了我的主要活动。java类,该类负责显示从问题“我的适配器”中的firebase检索的回收器视图项。java类和模型类。我相信,在我将图像URI上载到firebase存储时,我可能犯了没有存储图像URI的错误,因此适配器无法检索图像位置。我想这可能是因为我
我在嵌套滚动视图中有一个回收器视图。当回收器视图中有太多数据时,滚动会滞后。除了将回收器视图从嵌套滚动视图中删除之外,还有什么方法可以解决这个问题吗?
我有一个动态填充的RecyclerView。 当新消息到达时,我使用此代码向下滚动到最后一个条目: 现在的问题是:如果用户已经向上滚动阅读旧消息,它不应该向下滚动。怎么才能检测出来?