首页 > 解决方案 > 当我在有大量数据时使用滚动条时 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.

存储库:https ://github.com/ErickSorto/Collat​​z-Calculator

标签: androidperformanceandroid-studioandroid-layoutandroid-recyclerview

解决方案


推荐阅读