android - 当我在有大量数据时使用滚动条时 RecyclerView 滞后
问题描述
我的 RecyclerAdapter
public class CollatzAdapter extends RecyclerView.Adapter<CollatzAdapter.ViewHolder> {
ArrayList<BigInteger> list = new ArrayList<BigInteger>();
List<Long> primeList;
public CollatzAdapter() {
}
public CollatzAdapter(ArrayList<BigInteger> list, ArrayList<Long> primeList) {
this.list = list;
this.primeList = primeList;
}
public CollatzAdapter(ArrayList<BigInteger> list) {
this.list = list;
}
@NonNull
@Override
public CollatzAdapter.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.row,parent,false);
return new ViewHolder(view);
}
@Override
public void onBindViewHolder(@NonNull CollatzAdapter.ViewHolder holder, int position) {
holder.mIterationPosition.setText((position + ":"));
holder.mNumber.setText(list.get(position).toString());
}
@Override
public int getItemCount() {
return list.size();
}
public class ViewHolder extends RecyclerView.ViewHolder {
public TextView mNumber;
public TextView mIterationPosition;
public ViewHolder(@NonNull View itemView) {
super(itemView);
mNumber = itemView.findViewById(R.id.iteration_num);
mIterationPosition = itemView.findViewById(R.id.iteration_position);
//mPrime = itemView.findViewById(R.id.iteration_prime);
}
}
public void setList(ArrayList<BigInteger> list) {
this.list = list;
}
}
我在哪里实施
iterationFragment = inflater.inflate(R.layout.fragment_iteration, container, false);
collatzViewModel = new ViewModelProvider(getActivity()).get(CollatzViewModel.class);
mRecyclerView = (RecyclerView) iterationFragment.findViewById(R.id.recycler_view);
mRecyclerView.setHasFixedSize(false);
mLayoutManager = new LinearLayoutManager(getActivity());
mAdapter = new CollatzAdapter();
mRecyclerView.setLayoutManager(mLayoutManager);
mRecyclerView.setAdapter(mAdapter);
collatzViewModel.getCollatz().observe(getViewLifecycleOwner(),(list)->{
mAdapter.setList(list);
mAdapter.notifyDataSetChanged();
});
当RecyclerView
包含 largeBigIntegers
时,比如一个整数 300 个字符和一个包含 100,000 个字符的列表,当我使用滚动条时它会滞后。滚动时有没有办法防止它滞后?它滞后太多,以至于应用程序崩溃。我不明白为什么会发生这种情况,因为RecyclerView
应该只加载几个BigIntegers
.
解决方案
推荐阅读
- android - 选择通过 Gmail 发送电子邮件时电子邮件正文为空
- class - Kotlin 为 8 位模拟器创建 Word 类
- select - 在声明的时间之后终止 Db2 select 语句
- c - 打印机模块的 ESC/POS 命令
- sonarqube - SonarQube 8.1 插件中的自定义通知通道
- sql - 从表中选择针对不同本地 ID 的单个第一次出现的行并将其插入另一个表中
- java - 如何从 SSL 连接获取公钥
- r - 包`sentimentr`:如何删除`sentiment_by`之前的表情符号和停用词
- python - 如何在 python 中使用许多可选字符串过滤来自谷歌分析 v4 的报告?
- java - 用 java 发现 web api