Soru & Cevap

RecyclerView kullanarak favori butonu ekleme ...

01.08.2019 - 11:02

Öncelikle herkese merhaba  , bir sözlük uygulaması yapıyorum ve  RecyclerView tasarım ve adapterinı hepsini yaptım..CardView bir resim koydum tıklandığında favori bölümüne eklenmesini ve istenildiğinde çıkartılmasını istiyorum..Acaba bunu nasıl yapabilirim..Yardımcı olursanız sevinirim

332 Görüntülenme

3 Cevap

Sitedeki sorulara cevap verebilmek için giriş yapın ya da üye olun.

Profile picture for user rumilfefalas
rumilfefalas
03.08.2019 - 08:40

Öncelikle yardım ve cevabınız için teşekkür ederim..Benim şimdi 2 adet Activity var , TurkceActivity - FavoriActivity Adapterlarını yazdım ve TurkceActivity ye card tasarimini tanıttım burada sıkıntı yok..Card tasarımı içerisine yıldız resimi yerleştirdim (imageViewFavori).Şimdi 

holder.imageViewFavori.setOnclickListener hangi kodu yazmam gerekiyor ki tıklanıldığında CardTasarmini FavoriActivity içerisine atsın..:(

Kagan Kartal
03.08.2019 - 04:46
Anladığım kadarıyla şu şekilde bir yapın var. Birbirinin aynısı iki liste, birinde bütün elemanlar var, diğerinde sadece favoriler var. Tamamının gösterildiği listede elemanlarda yıldız var, favori olanlarda yıldız rengi farklı. favoriye seçilmemiş olana tıklayınca yıldız renk değiştirecek ve favori sayfasına gidince görüntülenebilecek. Eğer bu şekilde bir yapı varsa 1 adapter ve 1 liste yeterli. Listesini yaptığın class'ın içine isFavorite diye bir boolean koy, adapter ın constructor'ına da aynı boolean'ı koy. TurkceActivity'den adapter'a giderken bu değeri false, FavoriActivity'dan giderken true gönder. Adapter içinde de isFavorite = true ise listeden isFavorite() = true olanları çekersin, aksi takdirde hepsini çekersin. Adapter'daki click listener'ın içinde de listesi gelen class'ın isFavorite değerini true/false yapıp listeyi güncellersin, notifyDataSetChanged dersin ve iki sayfayı da güncellemiş olursun.
Profile picture for user kagankartal
kagankartal
01.08.2019 - 11:31

Adapter içindeki ViewHolder da tıklanmasını istediğin layout u tanımlayıp "onBindViewHolder" içinde "holder.***layout***.
setOnClickListener" şeklinde listener tanımlayabilirsin. Listener içinde istediğin işlem bittikten sonra listeyi güncellemek için "notifyDataSetChanged" çağırmak gerekecek. Dolayısıyla listener içindeki işlem bitince, "notifyDataSetChanged" çağırmadan, adapter classını çağırırken kullandığın datayı da güncellemen gerekliyor.

picture-230544-1550312762.jpg
amad
01.08.2019 - 07:51

listener metodunu adapter sınıfınızda yapabilirsiniz. Örnek adapter sınıfı :  

 

package com.ahmetc.example

import android.content.Context;
import android.content.Intent;
import android.support.annotation.NonNull;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import com.ahmetc.ezbergec.R;
import java.util.ArrayList;

public class myAdapter extends RecyclerView.Adapter<myAdapter.CardViewHolder>{

    private Context context;
    private ArrayList<String> kelimeler;

    public class CardViewHolder extends RecyclerView.ViewHolder
    {
        public TextView yazi;
        
        public CardViewHolder(View v)
        {
            super(v);
            yazi = v.findViewById(R.id.yazi);
        }
    }

    public dersAdapter(Context context, ArrayList<Dersler> kelimeler) {
        this.context = context;
        this.kelimeler = kelimeler;
    }
    @NonNull
    @Override
    public CardViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
        View v = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.card,viewGroup,false);
        return new CardViewHolder(v);
    }

    @Override
    public void onBindViewHolder(@NonNull CardViewTutucu cardViewTutucu, int i) {

        cardViewHolder.yazi.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                //To do
            }
        });
        
    }
    @Override
    public int getItemCount() {
        return derslerArrayList.size();
    }
}