Recyclerview + Firebase медленно прокручивается на некоторых устройствах - PullRequest
0 голосов
/ 18 апреля 2019

Мне нужна помощь, чтобы ускорить мой RecyclerView в моем приложении для Android. У меня есть класс, который извлекает список данных из Firbase, адаптер и просмотрщик просмотрщика. Моя проблема заключается в том, что на некоторых устройствах прокрутка в режиме повторного просмотра слишком медленная. Мне нужен способ оптимизировать это.

У меня есть еще одна проблема: E / RecyclerView: адаптер не подключен; пропускающий макет

Я пытался запустить новое задание, но прокрутка также медленная

Это мой переходник:

public class PostAdapter extends RecyclerView.Adapter<PostViewHolder> {

    private List<Post> PostData;
    private Context context;
    private ItemClickListener mListener;

    public PostAdapter(List<Post> postData, Context context, ItemClickListener listener) {
        this.PostData = postData;
        this.context = context;
        this.mListener = listener;
    }

    @NonNull
    @Override
    public PostViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
        LayoutInflater inflater = LayoutInflater.from(context);
        View itemView = inflater.inflate(R.layout.blog_row,viewGroup,false);
        return new PostViewHolder(itemView, mListener);
    }

    @Override
    public void onBindViewHolder(@NonNull PostViewHolder postViewHolder, int i) {
        postViewHolder.postImageview.setImageURI(PostData.get(i).getImage());
        postViewHolder.posttitletext.setText(PostData.get(i).getTitle());
        postViewHolder.postdesctext.setText(PostData.get(i).getDesc());


    }

    @Override
    public int getItemCount() {
        return PostData.size();
    }
}

Это мой переработчик. ViewHolder:

public class PostViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {

    public TextView posttitletext;
    public TextView postdesctext;
    public SimpleDraweeView postImageview;
    private ItemClickListener mListener;

    public PostViewHolder(@NonNull View itemView, ItemClickListener listener) {
        super(itemView);

        posttitletext = itemView.findViewById(R.id.post_title);
        postdesctext = itemView.findViewById(R.id.post_desc);
        postImageview = itemView.findViewById(R.id.post_image);
        mListener = listener;
        itemView.setOnClickListener(this);

    }

    @Override
    public void onClick(View v) {

        mListener.onClick(v,getAdapterPosition());

    }

}

Это мой класс Firebase для получения данных:

public class FirebaseGetData {
    FirebaseDatabase database = FirebaseDatabase.getInstance();

    private List<Post> postx = new ArrayList<>();
    private List<Product> prd = new ArrayList<>();
    private List<String> prdid = new ArrayList<>();



    public void readDataPost(final FirebaseCallbackPost firebaseCallback ){

        ValueEventListener eventListener =  new ValueEventListener() {
            @Override
            public void onDataChange(DataSnapshot snapshot) {
                postx.clear();
                for (DataSnapshot postSnapshot: snapshot.getChildren()) {
                    Post ps = postSnapshot.getValue(Post.class);
                    postx.add(ps);
                }
                firebaseCallback.onCallback(postx);
            }

            @Override
            public void onCancelled(DatabaseError databaseError) {
                System.out.println("The read failed: " + databaseError.getMessage());
            }
        };


        DatabaseReference post = database.getReference().child("Post");
        post.addListenerForSingleValueEvent(eventListener);

    }

    public interface FirebaseCallbackPost{
        void onCallback(List<Post> list);
    }

}

И вот как я устанавливаю вид переработчика:

recycler_post = view.findViewById(R.id.myrecyclerview);
        recycler_post.setHasFixedSize(true);

        layoutmng = new LinearLayoutManager(getContext());
        recycler_post.setLayoutManager(layoutmng);

И вот как я показываю переработчик с его данными

private void LoadData() {


        new FirebaseGetData().readDataPost(new FirebaseGetData.FirebaseCallbackPost() {
            @Override
            public void onCallback(List<Post> list) {
                posts = list;
                Log.d("XXX", String.valueOf(posts.size()));
                listener = new ItemClickListener() {
                    @Override
                    public void onClick(View view, int position) {
                        Toast.makeText(getContext(), "Offertona!!", Toast.LENGTH_SHORT).show();
                    }
                };
                adapter = new PostAdapter(posts, getContext(), listener);
                recycler_post.setAdapter(adapter);
            }
        });

    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...