Мне нужна помощь, чтобы ускорить мой 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);
}
});
}