RecyclerView nesnesi ile yapabileceğiniz çokça örnekten biri de, her satırın birbirinden benzersiz görüntülere sahip olmasıdır. Multiple View Holder mekanizması sayesinde her satır aynı görüntüde olmasın da;

Örneğin: 1. ve 2. satırda Kişi, 3. satırda Reklam layout'u göstersin, 4 ve 5. satırlarda yine Kişi değerini göstermeye devam etsin gibi işler yapmanız gereken durumlar oluşabilir. Hazırsak örneği görelim.

Projenizin Build.Gradle(Module: app) içerisinde depentencies scope'u içerisine aşağıdaki satırları ekleyiniz.

implementation 'com.android.support:recyclerview-v7:27.1.1'
implementation 'com.android.support:cardview-v7:27.1.1'

res > layout > layout_kisi.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="wrap_content">

    <android.support.v7.widget.CardView
        android:layout_width="match_parent"
        android:layout_height="110dp"
        android:layout_alignParentStart="true"
        android:layout_alignParentTop="true"
        android:layout_marginStart="10dp"
        android:layout_marginTop="10dp"
        android:layout_marginEnd="10dp"
        android:layout_marginBottom="10dp">

        <RelativeLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent">

            <ImageView
                android:id="@+id/ivResim"
                android:layout_width="60dp"
                android:layout_height="60dp"
                android:layout_alignParentStart="true"
                android:layout_alignParentTop="true"
                android:layout_marginStart="15dp"
                android:layout_marginTop="13dp"
                app:srcCompat="@mipmap/ic_launcher_round" />

            <TextView
                android:id="@+id/tvAdSoyad"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_alignParentStart="true"
                android:layout_alignParentTop="true"
                android:layout_marginStart="148dp"
                android:layout_marginTop="22dp"
                android:text="TextView"
                android:textSize="24sp" />

            <TextView
                android:id="@+id/tvYas"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_alignStart="@+id/tvAdSoyad"
                android:layout_alignParentTop="true"
                android:layout_marginTop="66dp"
                android:text="TextView" />
        </RelativeLayout>
    </android.support.v7.widget.CardView>
</RelativeLayout>

res > layout > layout_reklam.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content">

    <android.support.v7.widget.CardView
        android:layout_width="match_parent"
        android:layout_height="100dp"
        android:layout_alignParentStart="true"
        android:layout_alignParentTop="true"
        android:layout_margin="10dp">

        <RelativeLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent">

            <TextView
                android:id="@+id/textView"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_alignParentStart="true"
                android:layout_alignParentTop="true"
                android:layout_marginStart="16dp"
                android:layout_marginTop="37dp"
                android:text="Reklam" />
        </RelativeLayout>
    </android.support.v7.widget.CardView>
</RelativeLayout>

res > layout > activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".Activity.MainActivity">

    <android.support.v7.widget.RecyclerView
        android:id="@+id/recyclerView"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_alignParentStart="true"
        android:layout_alignParentTop="true" />
</RelativeLayout>

drawable klasörü içerisine > user1.png, user2.png dosyaları ekleyiniz.

Projenizin içerisine Model paketi oluşturup;

Kisi sınıfı üretiniz;

public class Kisi {
    private int resimId;
    private int yas;
    private String adSoyad;

    public Kisi() {
    }

    public Kisi(int resimId, int yas, String adSoyad) {
        this.resimId = resimId;
        this.yas = yas;
        this.adSoyad = adSoyad;
    }

    public int getResimId() {
        return resimId;
    }

    public void setResimId(int resimId) {
        this.resimId = resimId;
    }

    public int getYas() {
        return yas;
    }

    public void setYas(int yas) {
        this.yas = yas;
    }

    public String getAdSoyad() {
        return adSoyad;
    }

    public void setAdSoyad(String adSoyad) {
        this.adSoyad = adSoyad;
    }
}

Reklam sınıfı üretiniz.

public class Reklam {
    private String reklamId;

    public Reklam() {
    }

    public Reklam(String reklamId) {
        this.reklamId = reklamId;
    }

    public String getReklamId() {
        return reklamId;
    }

    public void setReklamId(String reklamId) {
        this.reklamId = reklamId;
    }
}

Adapter paketi üretip, içinde RecyclerViewAdapter sınıfı üretiniz.

public class RecyclerViewAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {

    private List<Object> list;
    private final static int TIP_KISI = 1, TIP_REKLAM = 2;
    private Context context;

    public RecyclerViewAdapter(List<Object> list, Context context) {
        this.list = list;
        this.context = context;
    }

    @Override
    public int getItemViewType(int position) {
        /*
        List içerisindeki gelen tipi yakalayabileceğimiz metot
         */
        if (list.get(position) instanceof Kisi) { // Tipler eşit ise true döner
            return TIP_KISI;
        } else if (list.get(position) instanceof Reklam) {
            return TIP_REKLAM;
        }
        return -1;
    }

    @NonNull
    @Override
    public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        int layout = 0;
        RecyclerView.ViewHolder viewHolder;
        switch (viewType) {
            case TIP_KISI:
                layout = R.layout.layout_kisi;
                View kisiView =
                        LayoutInflater
                                .from(parent.getContext())
                                .inflate(layout,parent,false);
                viewHolder = new KisiViewHolder(kisiView);
                break;
            case TIP_REKLAM:
                layout = R.layout.layout_reklam;
                View reklamView =
                        LayoutInflater
                            .from(parent.getContext())
                            .inflate(layout,parent,false);
                viewHolder = new ReklamViewHolder(reklamView);
                break;
            default:
                viewHolder = null;
                break;
        }
        return viewHolder;
    }

    @Override
    public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int position) {
        int viewType = holder.getItemViewType();
        switch (viewType){
            case TIP_KISI:
                Kisi kisi = (Kisi)list.get(position);
                ((KisiViewHolder)holder).showDetails(kisi);
                break;
            case TIP_REKLAM:
                Reklam reklam = (Reklam)list.get(position);
                ((ReklamViewHolder)holder).showDetails(reklam);
                break;
        }
    }

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

    public class KisiViewHolder extends RecyclerView.ViewHolder{
        private TextView tvAdSoyad,tvYas;
        private ImageView ivResim;
        public KisiViewHolder(View itemView) {
            super(itemView);
            ivResim = itemView.findViewById(R.id.ivResim);
            tvAdSoyad = itemView.findViewById(R.id.tvAdSoyad);
            tvYas = itemView.findViewById(R.id.tvYas);
        }
        public void showDetails(Kisi kisi){
            tvAdSoyad.setText(kisi.getAdSoyad());
            tvYas.setText(""+kisi.getYas());
            ivResim.setImageResource(kisi.getResimId());
        }
    }

    public class ReklamViewHolder extends RecyclerView.ViewHolder{
        public ReklamViewHolder(View view){
            super(view);
        }
        public void showDetails(Reklam reklam){

        }
    }
}

Activity paketi içierisinde MainActivity sınıfı için

public class MainActivity extends AppCompatActivity {

    RecyclerView recyclerView;
    RecyclerViewAdapter adapter;
    List<Object> objects;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        recyclerView = findViewById(R.id.recyclerView);
        objects = new ArrayList<>();
        objects.add(new Kisi(R.drawable.user1,20,"Ad Soyad 1"));
        objects.add(new Kisi(R.drawable.user2,20,"Ad Soyad 2"));
        objects.add(new Reklam("12345"));
        objects.add(new Kisi(R.drawable.user1,25,"Ad Soyad 3"));
        objects.add(new Kisi(R.drawable.user2,29,"Ad Soyad 4"));

        adapter = new RecyclerViewAdapter(objects,getApplicationContext());
        recyclerView.setLayoutManager(new LinearLayoutManager(getApplicationContext()));
        recyclerView.setAdapter(adapter);
    }
}

Keyifli çalışmalar diliyorum, yararlı olması dileğimle...

Bu makaleyi paylaşın:

3 Comments

  1. Bu kodları yazdığınız yerler hani var yaa tam olarak ben ismini bilmiyorum kendimi yeni yeni geliştiriyorum... Mesela sizler kodları oraya yapistiriyotsunuz ayri bir bölüm oluşuyor o kodları alıp koyalamak için sizden isteğim bu gibi uygulamayı youtube hesabınızda paylaşabilir misiniz ? Sqlite ile nasıl yapıldığı hakkında diğer türlü yapamıyorum...

Bir yorum bırakın