【发布时间】:2017-04-25 10:48:54
【问题描述】:
我的列表中有 200 多个项目。 RecyclerView 定期更新(每 10 秒)。 RecyclerView 在更新期间阻塞 ui 线程几秒钟。我正在使用notifyDataSetChanged 方法刷新recyclerview。有没有其他方法可以防止冻结?顺便说一句,我不想使用分页。
此方法每 10 秒运行一次:
public void refreshAssetList(List<Asset> newAssetList){
recyclerViewAdapter.setAssetList(newAssetList);
recyclerViewAdapter.notifyDataSetChanged();
}
RecyclerViewAdapter 类:
public class AssetListRecyclerViewAdapter extends RecyclerView.Adapter<AssetListRecyclerViewAdapter.BaseViewHolder> {
private List<Asset> assetList;
Context context;
public AssetListRecyclerViewAdapter(List<Asset> assetList, Context context) {
this.assetList = assetList;
this.context = context;
}
public void setAssetList(List<Asset> assetList) {
this.assetList = assetList;
}
@Override
public BaseViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View itemLayoutView = LayoutInflater.from(parent.getContext()).inflate(R.layout.list_item_asset, null);
return new DetailViewHolder(itemLayoutView);
}
@Override
public void onBindViewHolder(BaseViewHolder holder, int position) {
Asset asset = assetList.get(position);
Last last = asset.getLast();
if (holder.getItemViewType() == TYPE_DETAIL) {
DetailViewHolder mHolder = (DetailViewHolder) holder;
mHolder.dateTextView.setText(last.getDate());
mHolder.brandTextView.setText(asset.getMc());
}
}
class DetailViewHolder extends BaseViewHolder {
@Bind(R.id.brandTextV)
TextView brandTextView;
@Bind(R.id.dateTextV)
TextView dateTextView;
DetailViewHolder(View itemLayoutView) {
super(itemLayoutView);
ButterKnife.bind(this, itemLayoutView);
}
}
}
【问题讨论】:
-
你能把这个方法的代码放在你的问题中吗? AssetListHelper.getAssetListByQuery(查询,上下文);
-
assetList 是您活动中的全局变量,对吗?
-
是的assetList 是一个全局变量。而 getAssetListByQuery 方法并不重要。我正在更新问题。
-
使用recyclerViewAdapter.notifyItemChanged(position);
-
@Ram 我想刷新所有项目。不仅仅是特定的项目。
标签: android android-recyclerview ui-thread android-runonuithread