RecyclerView with the show button more

1

I have a recyclerview that pulls data from the firebase, however it takes all the data at once, and this causes the application to hang, as I do to show only the first 10 and as the user is descending the scrool it will download more data?

Adapter

  public VideoListAdapter(@NonNull Activity context, @LayoutRes 
  int resource, @NonNull List<VideoUpload> objects) {
    super(context, R.layout.image_item, objects);
    this.context = context;
    listImage = objects;
}


@NonNull
@Override
public View getView(int position, @Nullable View convertView, @NonNull ViewGroup parent) {
    LayoutInflater inflater = (LayoutInflater) context
            .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    autenticacao = FirebaseAuth.getInstance();
    @SuppressLint("ViewHolder") View v = inflater.inflate(R.layout.image_item, parent, false);

    imgList = new ArrayList<>();

    mDatabaseRef = FirebaseDatabase.getInstance().getReference("Videos/");

    mDatabaseRef.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {


            //Fetch image data from firebase database
            for (DataSnapshot snapshot : dataSnapshot.getChildren()) {

                VideoUpload video = snapshot.getValue(VideoUpload.class);
                string = video.getUrl();


            }


        }

        @Override
        public void onCancelled(DatabaseError databaseError) {

        }
    });
    telefone = v.findViewById(R.id.contatoResponsavel);
    posicao = v.findViewById(R.id.posicaoJogador);
    idade = v.findViewById(R.id.idadeJogador);
    localidade = v.findViewById(R.id.localidadeJogador);
    TextView tvName = v.findViewById(R.id.tvImageName);
    imgYoutube = v.findViewById(R.id.videoPlayer);

    YouTubeThumbnailView youTubePlayerView = (YouTubeThumbnailView) v.findViewById(R.id.youtube_thumbnail);

    String tvNameString;
    final String linkFormatado;
    final String linkYoutube;
    linkYoutube = listImage.get(position).getUrl();

    linkFormatado = linkYoutube.replace("https://youtu.be/", "");
    posicao.setText("Posição: " + listImage.get(position).getPosicao());
    idade.setText("Idade: " + listImage.get(position).getIdade());
    localidade.setText("Localização: " + listImage.get(position).getEstado());
    tvNameString = listImage.get(position).getName();
    telefone.setText("Contato: " + listImage.get(position).getTelefone());

    tvName.setText("Nome: " + tvNameString);
    imgYoutube.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            Intent intent = YouTubeStandalonePlayer.createVideoIntent((Activity) getContext(),
                    "AIzaSyBvrGBKv7AU19B8DPp9ubiWPRS9FE7Ek9w",
                    linkFormatado,

                    100,
                    true,
                    false);
            getContext().startActivity(intent);


        }
    });


    return v;
}


}

Activity

    container = findViewById(R.id.container);

    anim = (AnimationDrawable) container.getBackground();
    anim.setEnterFadeDuration(2500);
    anim.setExitFadeDuration(5000);
    anim.start();


    imgList = new ArrayList<>();

   lv = findViewById(R.id.listViewImage);

    mTextMessage = (TextView) findViewById(R.id.message);
    BottomNavigationView navigation2 = (BottomNavigationView) findViewById(R.id.navigation);
    navigation2.setOnNavigationItemSelectedListener(mOnNavigationItemSelectedListener);

    progressDialog = new ProgressDialog(this);
    progressDialog.setMessage("Aguarde ....");
    progressDialog.show();

    mDatabaseRef = FirebaseDatabase.getInstance().getReference("Videos/");

    mDatabaseRef.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            progressDialog.dismiss();

            //Fetch image data from firebase database
            for (DataSnapshot snapshot : dataSnapshot.getChildren()) {
                //ImageUpload class require default constructor
                VideoUpload video = snapshot.getValue(VideoUpload.class);
                imgList.add(video);


            }


            adapter = new VideoListAdapter(HomeJogadorActivity.this, R.layout.image_item, imgList);
            //Set adapter for listview
            lv.setAdapter(adapter);

        }

        @Override
        public void onCancelled(DatabaseError databaseError) {
            progressDialog.dismiss();
        }
    });
}

@Override
public void onBackPressed() {

}

}

    
asked by anonymous 24.10.2018 / 02:15

1 answer

0

Try using the setHasFixedSize () for the recycler view that helps with the performance gain according to the documentation.

Example:

mRecyclerView.setHasFixedSize(true)

Java Doc:

RecyclerView can perform several optimizations if it knows that RecyclerView's size is not affected by the adapter contents.

If your use of RecyclerView falls into this category, set this to {@code true}. It will allow RecyclerView to avoid invalidating the entire layout when its adapter contents change.

@param hasFixedSize true if adapter changes can not affect the size of the RecyclerView.

Then tell me if it worked, hugs.

    
24.10.2018 / 14:01