Android Using View Holder

403 views Asked by At

I try to show in my app using firebase but not return image or the other data please help me I use it after no any error but now I do not use this method

public class PaylasAnaSayfa extends AppCompatActivity {

    private RecyclerView mBlogList;
    public DatabaseReference mDatabase;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_paylas_ana_sayfa);

        mDatabase= FirebaseDatabase.getInstance().getReference().child("Resimler");

        mBlogList= (RecyclerView) findViewById(R.id.resim_list);
        mBlogList.setHasFixedSize(true);
        mBlogList.setLayoutManager(new LinearLayoutManager(this));


        if (mDatabase==null){
            Toast.makeText(this, "veri tabanı hatası", Toast.LENGTH_SHORT).show();
        }else {
            FirebaseRecyclerAdapter<PaylasModel, PaylasHolder> adapter = new FirebaseRecyclerAdapter<PaylasModel, PaylasHolder>(
                    PaylasModel.class,
                    R.layout.resim_row,
                    PaylasHolder.class,
                    mDatabase
            ) {
                @Override
                protected void populateViewHolder(PaylasHolder viewHolder, PaylasModel model, int position) {
                    viewHolder.setImage(getApplicationContext(), model.getImgImage());
                    viewHolder.setBaslik(model.getImgBaslik());
                    viewHolder.setAciklama(model.getImgAciklama());
                    viewHolder.setKullanici(model.getImgKullaniciAdi());
                    viewHolder.setDers(model.getImgDers());
                }
            };

            mBlogList.setAdapter(adapter);

        }

    }


    private static class PaylasHolder extends RecyclerView.ViewHolder {
        View mView;
        public PaylasHolder(View itemView) {
            super(itemView);
            mView=itemView;
        }

        public void setBaslik(String baslik){
            TextView tBaslik= (TextView) mView.findViewById(R.id.row_img_baslik);
            tBaslik.setText(baslik);
        }

        public void setAciklama(String aciklama){
            TextView tAciklama= (TextView) mView.findViewById(R.id.row_img_aciklama);
            tAciklama.setText(aciklama);
        }

        public void setKullanici(String kullanici){
            TextView tKullanici= (TextView) mView.findViewById(R.id.row_img_kullanici);
            tKullanici.setText(kullanici);
        }
        public void setDers(String ders){
            TextView tDers= (TextView) mView.findViewById(R.id.row_img_ders);
            tDers.setText(ders);
        }

        public void setImage(final Context context, final String image){
            final ImageView tImage= (ImageView) mView.findViewById(R.id.row_img_image);
            Picasso.with(context).load(image).networkPolicy(NetworkPolicy.OFFLINE).into(tImage, new Callback() {
                @Override
                public void onSuccess() {

                }

                @Override
                public void onError() {
                    Picasso.with(context).load(image).into(tImage);
                }
            });
        }

    }

}

using view holder do not return data The word in square brackets is the alt text, which gets displayed if the browser can't show the image. Be sure to include meaningful alt text for screen-reading software.

1

There are 1 answers

0
ujjwal mainali On

First you don't need to initialize views everytime in the methods of your ViewHolder.RecyclerView reuses the view from the view pool.

private static class PaylasHolder extends RecyclerView.ViewHolder {
    View mView;
    TextView tBaslik;
    public PaylasHolder(View itemView) {
        super(itemView);
        mView=itemView;
         tBaslik = mView.findViewById(R.id.row_img_baslik);
        //intialize all you view here once and for all. 
     }

    public void setBaslik(String baslik){
        tBaslik.setText(baslik);
    }

    public void setAciklama(String aciklama){
        tAciklama.setText(aciklama);
    }

    public void setKullanici(String kullanici){
        tKullanici.setText(kullanici);
    }
    public void setDers(String ders){
        tDers.setText(ders);
    }

    public void setImage(final Context context, final String image){          
     Picasso.with(context).load(image).networkPolicy(NetworkPolicy.OFFLINE).into(tImage, new Callback() {
            @Override
            public void onSuccess() {

            }

            @Override
            public void onError() {
                Picasso.with(context).load(image).into(tImage);
            }
        });
    }

}

If you are very much sure about the size of the recyclerview then only use setHasFixedSize(true) otherwise it will not request layout upon the addition of data to the adapter.