Gönderiler Android Firebase Database İşlemleri
Post
Vazgeç

Android Firebase Database İşlemleri

ilk önce Firebase Database için kütüphane eklememiz gerekiyor. App build.gradle dosyasını açıyoruz ve com.google.firebase:firebase-database:16.1.0 kütüphanesini ekliyoruz. Sync edip dosyayı kapatıyoruz. Firebase Database kullanmak için veritabanı özelliğini Firebase sisteminden açmamız gereklidir. Firebase sistemine giriyoruz. Yan taraftan database kısmına gidiyoruz. Aşağıdan realtime database seçiyoruz. Şu an için test modunda başlatacağız. Test modunu seçip devam ediyoruz. Test modu veritabanınıza herkesin erişip işlem yapmasını sağlar. Bunu önlemek için veritabanına kurallar koymanız gerekmektedir. Bu kural sadece kayıt olmuş kişilerin erişmesi veya sadece belli kayıtlı kullanıcıların erişmesi şeklinde olabilir. Veya herkesin erişimine kapatabilir ve sadece internetten eklenecek şeklinde yapabilirsiniz. İlerde bu kurallardan birini kullanacağız.

Historyfragment layout dosyasını açıyoruz. İlk önce recyclerview ekliyoruz. Bu öge bizim kartlarımızı liste şeklinde tutacak ve ekrana verecektir. Veritabanına ekleme işlemini yapmak için bir tane buton ekleyeceğiz. Uygulamayı Play Store’a yüklerken bu butonu kaldıracağız. Bu işlemi floatingactionbutton kısaca FAB ile yapacağız. Görsel olarak daha güzel duruyor. FAB için bir ikona ihtiyacımız var. Drawable klasörüne bir tane ikon ekliyoruz. Recyclerview altına gelip FAB’ı ekliyoruz. Genilik ve yükseklik olarak wrap_content seçiyoruz. Id ekliyoruz. Butona bir ikon eklememiz gerek. Bunun için src özelliğini ekliyoruz. Değer olarak az önce eklediğimiz ikonu gösteriyoruz. Buton boyutunu fabSize ile ayarlıyoruz. Normal olarak seçiyoruz. Konum ayarlamak için gracity özelliğini ekliyoruz. Değer olarak bottomend diyoruz. Böylece buton en aşağıda ve en sağda olacaktır. Buton şu an kenarlar ile bitişik durumdadır. Bunu çözmek için margin diyip 25dp veriyoruz. Butonun arka plan rengini değiştirmek için backgroundTint seçeneğini seçiyoruz. Burada app ve android olarak iki seçenek var. Biz android olanı seçiyoruz. Karşısına colors dosyasındaki istediğimiz rengin ismini yazıp buton tasarımını ve ayrıca sayfamızın tasarımını bitiriyoruz.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".HistoryFragment">

    <android.support.v7.widget.RecyclerView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:id="@+id/list"
        />

    <android.support.design.widget.FloatingActionButton
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="bottom|end"
        android:layout_margin="25dp"
        android:id="@+id/fab"
        android:src="@drawable/ic_add_black_24dp"/>

</FrameLayout>

İşlemlerin yapılacağı kodu yazmak için historyfragment dosyasını açıyoruz. Oncreateview methodunun içine geliyoruz. Bize bir kod veriliyor ve bir değer return ediliyor. Biz bunu kodumuzu yazdıktan sonra return edeceğiz. O yüzden varolan kodun başına view sınıfından nesne oluşturup bu koda eşitliyoruz. Ardından bu nesneyi return ediyoruz.

1
2
View view = inflater.inflate(R.layout.fragment_history, container, false);
return  view;

Ardından recyclerview ögesine erişeceğiz. İlk önce recylerview sınıfından bir nesne oluşturacağız ve bu nesneyi layout dosyasındaki recyclerview’e bağlayacağız. Fragment’larda activity’lerde olduğu gibi layout dosyasına direk erişemiyoruz. Bunun için kodun önüne return ettiğimiz nesnenin adını yazmamız gereklidir. Aynı şeyi FAB içinde yapıyoruz.

1
2
RecyclerView recyclerView= view.findViewById(R.id.list);
FloatingActionButton fab = view.findViewById(R.id.fab);

FAB için click listener yazıyoruz.

1
2
3
4
5
6
fab.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {

    }
});

Biz burada tıklanıldığı zaman başka bir activity çalıştıracağız ve o activity’ye gideceğiz. Bunun için intent işlemini kullanacağız. Bunun için önce o activity’yi oluşturmamız gerekmektedir. Java dosyalarının bulunduğu klasöre gelip sağ tıklayıp new seçeneğine gidiyoruz. Açılan sayfadaki activity bölümünden empty activity seçeneğini seçiyoruz. Açılan sayfada activity’mize bir isim verip devam ediyoruz.

Yeni activity’nin tasarım dosyasını açıyoruz. Tasarım olarak RelativeLayout seçiyoruz. Bir tane TextView ekliyoruz. TextView ile bizim ekranda istediğimiz yazıyı göstermemizi sağlıyor. Text kısmına bu ögede ne yazacağını yazıyoruz. TextSize ile yazının boyutunu ayarlıyoruz.

1
2
3
4
5
6
7
8
<TextView
    android:id="@+id/textview1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="İsim:"
    android:layout_marginTop="25dp"
    android:textSize="24sp"
    android:layout_marginStart="50dp"/>

Bir adet EditText ekliyoruz. EditText ile ekrandan girdi alabiliyoruz. Ems ile yazı alanının boyutunu ayarlıyoruz. Ama ne kadar yazı yazılabilir diye değil yazma alanının ekranda ne kadar geniş gözükeceğini ayarlıyoruz. İnputType ile girdinin ne olduğunu belirliyoruz. AllignBottom ile alt kısmının hangi diğer öge ile aynı seviyede olmasını istediğimizi ayarlıyoruz. ToEndOf ile hangi ögenin sonunda yer alacağını ayarlıyoruz.

1
2
3
4
5
6
7
8
9
10
<EditText
    android:id="@+id/edittext1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:ems="10"
    android:inputType="text"
    android:layout_alignBottom="@id/textview1"
    android:layout_marginStart="80dp"
    android:layout_toEndOf="@id/textview1"
    android:labelFor="@id/edittext1"/>

Son olarak bir adet FAB ekliyoruz. Hepsine birer id verip tasarımı bitiriyoruz.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
<?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=".AddActivity">

    <TextView
        android:id="@+id/textview"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="İsim:"
        android:layout_marginTop="25dp"
        android:textSize="24sp"
        android:layout_marginStart="50dp"
        />

    <EditText
        android:id="@+id/edittext"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:ems="10"
        android:inputType="text"
        android:layout_alignBottom="@id/textview"
        android:layout_marginStart="80dp"
        android:layout_toEndOf="@id/textview"
        />

    <android.support.design.widget.FloatingActionButton
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:src="@drawable/ic_check_black_24dp"
        android:layout_alignParentEnd="true"
        android:layout_alignParentBottom="true"
        android:layout_margin="25dp"
        android:id="@+id/fab"
        app:fabSize="normal"/>

</RelativeLayout>

Database için bir model sınıfı oluşturmamız gerekiyor. Bunun için java klasörüne gelip bir java dosyası oluşturuyoruz. Java klasörüne sağ tıklayıp new diyip java class seçeneğini seçiyoruz. Class adını Movies olarak yazıp devam ediyoruz. Açılan dosyada en üste String tipinde bir değişken oluşturuyoruz. Bu isim aynı zamanda Firebase Database’de de gözükecektir. Altına sınıfın kurucu methodunu yazıyoruz. Altına yine kurucu method yazıyoruz ama bu sefer bu methodu dışarıdan değişken alacak şekilde ayarlıyoruz. İçinde bu sınıftaki değişken ile gelen değişkeni değiştirecek şekilde kod yazıyoruz. Şimdi bu değişken için getter ve setter tanımlamamız gerekiyor. Eğer değişkeni public yaparsanız buna ihtiyacınız yok ama eğer değişkeniniz private ise değişkene dışarıdan erişmek için bunu yapmanız gereklidir. Private yapmanız kodunuzun daha güvenli olmasını sağlayacaktır. Methodun dışında boş bir yere sağ tıklayıp generate yazısına tıklıyoruz. Çıkan bölümden getter and setter seçiyoruz. Açılan sayfadan hangi değişkenin getter ve setter methodunun oluşturulacağını seçip devam ediyoruz. Model sınıfımız tamamlandı.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
public class Movies {

    private String film_ismi;

    public Movies(){}

    public Movies(String film_ismi){
        this.film_ismi=film_ismi;
    }

    public String getFilm_ismi() {
        return film_ismi;
    }

    public void setFilm_ismi(String film_ismi) {
        this.film_ismi = film_ismi;
    }
}

AddActivity java dosyasını açıyoruz. Edittext ve FAB nesnelerini oluşturuyoruz ve bunları tasarım ögelerine bağlıyoruz. Veritabanı referansı oluşturuyoruz. Veritabanı referansını Firebase Database’deki düğüme bağlıyoruz. Burada bağladığımız düğümün adı Fimler’dir. Eğer düğüm daha önceden yoksa kendisi veritabanında oluşturur.Burada veritabanı referansının önüne final gelmesinin sebebi referansa başka bir method içinden eriştiğimiz içindir. Bu method FAB dinleme işleminin içindeki onclick methodudur.

1
2
3
EditText editText= findViewById(R.id.edittext);
FloatingActionButton fab=findViewById(R.id.fab);
final DatabaseReference reference= FirebaseDatabase.getInstance().getReference("Filmler");

İşlem bitince veritabanına kaydetme işlemini yapması için butonu dinleme işlemini oluşturuyoruz. İlk önce edittext’teki verileri bir string’e aktarıyoruz. ToString işlemi ile alınan değeri string değerine dönüştürüyoruz. Movies sınıfından movies isminde bir nesne oluşturuyoruz. Oluştururken oluşturduğumuz string değişkenini sınıfa veriyoruz. Veritabanı referansı ile bu nesneyi ve tuttuğu değeri veritabanına gönderiyoruz. Ardından finish kodu ile activity’yi sonlandırıyoruz.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
public class AddActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_add);
        final EditText editText= findViewById(R.id.edittext);
        FloatingActionButton fab=findViewById(R.id.fab);
        final DatabaseReference reference= FirebaseDatabase.getInstance().getReference("Filmler");

        fab.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                String film_adi=editText.getText().toString();
                Movies movies=new Movies(film_adi);
                reference.push().setValue(movies);
                finish();
            }
        });
    }
}

Historyfragment dosyamıza geri dönüyoruz. Intent sınıfından bir nerne oluşturup bu nesne karşısına aşağıdaki kodu yazıyoruz. Burada yeni bir activity oluşturup ilk değer olarak bu activity’nin context’ini ve ikinci değer olarak gideceğimiz activity’nin sınıfını veriyoruz. Altına istediğimiz intent’i başlatacak kodu yazıyoruz. Startactivity diyip intent ismi giriyoruz.

Projemizi telefonumuzda başlatalım. Bunun için IDE’deki yukarıdaki yeşil oynatma tuşuna basıp projenin çalışacağı ortamı seçiyoruz. Projemizin build edilip telefonumuzda açılmasını bekliyoruz. Açılınca butona basıp ekleme sayfasına gidiyoruz. İsim olarak herhangi bir şey yazıp yine butona basıp ekleme işlemini yapıyoruz. Firebase sisteminde veritabanına gelip eklenip eklenmediğine bakıyoruz.

Şimdi recyclerview de kullanmak için bir kart tasarımı oluşturacağız. Layout klasöründe yeni bir tasarım dosyası oluşturmamız gerekmektedir. Bunun için layout klasörüne sağ tıklayıp new altından layout resource file seçeneğini seçiyoruz. İsim olarak ben card seçtim siz başka bir şey yapabilirsiniz. Kart tasarımı kullanacağımız için en yukarıya CardView sınıfını yazıyoruz. Onun altına bir tane textview ekliyoruz. Bu textview de film_ismi değişkenini göstereceğiz.

1
2
3
4
5
6
7
8
9
10
11
12
13
<?xml version="1.0" encoding="utf-8"?>
<android.support.v7.widget.CardView
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content">
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/cardText"
        android:textSize="24sp"
        android:layout_margin="15dp"/>

</android.support.v7.widget.CardView>

Recyclerview içinde kart tasarımlarını göstermek ve veritabanındaki verilerin doğru yere yazılması için recyclerview’e adapter tasarlayacağız. Adapter bize verilerimizi uygulamada nasıl görüntüleneceğini belirleme fırsatı vermektedir. Java klasörüne gelip FirebaseAdapter isminde java sınıfı ekliyoruz. Sınıfı oluşturup başka bir sınıftan kalıtım alması için başına extends yazıp RecyclerView.Adapter sınıfını yazıyoruz.

1
public class FirebaseAdapter extends RecyclerView.Adapter<FirebaseAdapter.UserViewHolder>

İçine global değişken olarak list ekliyoruz. List ekleyeceğimiz verilerin listesi olacak. Yapıcı methoumuzu yazıp context değişkenin almasını ve method içinde bunu şuanki sınıftaki ile değiştirmesini sağlıyoruz.

1
2
3
public FirebaseAdapter(List<Movies> list){
        this.list=list;
    }

Bir tane viewholder methodu oluşturuyoruz. Bu method ile hangi tasarımı kullanacağımızı adapter’a gösteriyoruz.

1
2
3
4
5
@NonNull
    @Override
    public UserViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType){
        return new UserViewHolder(LayoutInflater.from(parent.getContext()).inflate(R.layout.card,parent,false));
    }

İtem sayısını geri döndüren bir tane method tanımlıyoruz. Bunu kullanmayacağız ama adapter’da gerekli methodlardan biri kendisi. List.size() ile listemizin değerine ulaşıyoruz.

1
2
3
4
@Override
    public int getItemCount() {
        return list.size();
    }

UserViewHolder methodu ekliyoruz. Bu method ile tasarım ögeleri için nesne oluşturabiliyoruz ve bu nesneleri kart üzerindeki ögelerle eşleştirebiliyoruz.

1
2
3
4
5
6
7
8
9
10
class UserViewHolder extends RecyclerView.ViewHolder{
        TextView txt_film_adi;


        private UserViewHolder(View itemView){
            super(itemView);

            txt_film_adi=itemView.findViewById(R.id.cardText);
        }
    }

OnBindViewHolder methodu oluşturuyoruz. Bu method sayesinde recyclerview pozisyonunu kullanıp listedeki aynı pozisyondaki veriyi çekiyoruz. Bu veriyi userviewholder methodunda oluşturduğumuz gerekli nesneyi kullanarak ilgili tasarım ögesine yönlendiriyoruz.

1
2
3
4
5
@Override
    public void onBindViewHolder(@NonNull FirebaseAdapter.UserViewHolder userViewHolder, int i) {
        final Movies movies = list.get(i);
        userViewHolder.txt_film_adi.setText(movies.getFilm_ismi());
    }

Şimdi Firebase’den veri çekeceğiz ve bunu adapter ile recyclerview’e aktaracağız. Historyfragment dosyamızı açalım. Global değişken olarak veritabanı referansı oluşturalım. Global değişken olarak verileri tutmak için Movies tipinde bir liste oluşturalım. Global değişken olarak recyclerview adapter oluşturalım.

1
2
3
private List<Movies> list;
private DatabaseReference reference;
private FirebaseAdapter adapter;

Oncreateview içinde veritabanı referansını düğüme bağlayalım. Oluşturduğumuz liste nesnesini bir objeye bağlayalım. Oluşturduğumuz adapter’ı daha önce oluşturduğumuz firebaseadapter’a bağlayalım. Değişken olarak oluşturduğumuz listeyi gönderelim.

1
2
3
reference= FirebaseDatabase.getInstance().getReference("Filmler");
list=new ArrayList<>();
adapter=new FirebaseAdapter(list);

Recyclerview için bir tane layoutmanager oluşturmamız gereklidir. Çeşitli layout managerlar vardır. Biz şu an için klasik liste şeklinde olanı kullanacağız. Bunun için linearlayoutmanager sınıfından bir nesne oluşturuyoruz. Oluşturduğumuz nesneyi recyclerview nesnesine layoutmanager olarak gösteriyoruz. Oluşturduğumuz adapter’ı rcyclerview nesnesine adapter olarak gösteriyoruz.

1
2
3
LinearLayoutManager linearLayoutManager=new LinearLayoutManager(getActivity());
recyclerView.setLayoutManager(linearLayoutManager);
recyclerView.setAdapter(adapter);

Veritabanından veri çekme işlemini başka bir methodda yapacağız. Oncreateview dışında bir yere gelip private tipinde updateList adında bir method oluşturuyoruz. İçine aşağıdaki kodu yazıyoruz. Childeventlistener ile veritabanından veri çekiyoruz. Gelen herbir veri bize datasnapshot adında geliyor. Biz bu veriyi model sınıfına uygun olarak alıp listeye ekliyoruz. Ardından listeye yeni veri girişi olduğunu adapter’a bildiriyoruz.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
private void updateList(){
        reference.addChildEventListener(new ChildEventListener() {
            @Override
            public void onChildAdded(@NonNull DataSnapshot dataSnapshot, @Nullable String s) {
                list.add(dataSnapshot.getValue(Movies.class));
                adapter.notifyDataSetChanged();
            }

            @Override
            public void onChildChanged(@NonNull DataSnapshot dataSnapshot, @Nullable String s) {

            }

            @Override
            public void onChildRemoved(@NonNull DataSnapshot dataSnapshot) {

            }

            @Override
            public void onChildMoved(@NonNull DataSnapshot dataSnapshot, @Nullable String s) {

            }

            @Override
            public void onCancelled(@NonNull DatabaseError databaseError) {

            }
        });
    }

Oncreteview içinde return’den önce ve referansın oluşturulmasından sonra herhangi bir yerde methoda erişiyoruz. Kodu telefonda çalıştırıyoruz ve test ediyoruz.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
public class HistoryFragment extends Fragment {

    private List<Movies> list;
    private DatabaseReference reference;
    private FirebaseAdapter adapter;

    public HistoryFragment() {

    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        final View view = inflater.inflate(R.layout.fragment_history, container, false);

        RecyclerView recyclerView= view.findViewById(R.id.list);
        FloatingActionButton fab = view.findViewById(R.id.fab);

        reference= FirebaseDatabase.getInstance().getReference("Filmler");
        list=new ArrayList<>();
        adapter=new FirebaseAdapter(list);

        LinearLayoutManager linearLayoutManager=new LinearLayoutManager(getActivity());
        recyclerView.setLayoutManager(linearLayoutManager);
        recyclerView.setAdapter(adapter);

        updateList();

        fab.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent ekleme = new Intent(view.getContext(),AddActivity.class);
                startActivity(ekleme);
            }
        });

        return  view;
    }

    private void updateList(){
        reference.addChildEventListener(new ChildEventListener() {
            @Override
            public void onChildAdded(@NonNull DataSnapshot dataSnapshot, @Nullable String s) {
                list.add(dataSnapshot.getValue(Movies.class));
                adapter.notifyDataSetChanged();
            }

            @Override
            public void onChildChanged(@NonNull DataSnapshot dataSnapshot, @Nullable String s) {

            }

            @Override
            public void onChildRemoved(@NonNull DataSnapshot dataSnapshot) {

            }

            @Override
            public void onChildMoved(@NonNull DataSnapshot dataSnapshot, @Nullable String s) {

            }

            @Override
            public void onCancelled(@NonNull DatabaseError databaseError) {

            }
        });
    }
}

Normalde uygulamamızda silme işlemine gerek yok ama ben onu da anlatacağım. Bunun için bir silme ikonuna ihtiyacımız var. Projeye bir tane silme ikonu ekliyoruz. Kart tasarımına gidip bu ikonu ekliyoruz. Bunun için imagebutton ögesini kullanacağız. Aşağıdaki değerleri veriyoruz. Burada background olarak transparent verdik çünkü diğer türlü arka planda gri bir arka plana sahip olacaktır. Bunun için colors dosyasında #0FFF değerine sahip bir renk değeri oluşturduk.

1
2
3
4
5
6
7
8
<ImageButton
        android:id="@+id/cardDelete"
        android:layout_width="50dp"
        android:layout_margin="15dp"
        android:layout_height="50dp"
        android:background="@color/colorTransparent"
        android:layout_gravity="end"
        android:src="@drawable/ic_delete_black_24dp"/>

Firebaseadapter dosyasını açıyoruz. Global değişken olarak string tipinde keys adında bir liste oluşturuyoruz. Bu listede gelen verilerin veritabanında hangi düğümde olduğunun anahtarları tutulacak. Bu değişkeni kurucu methodda tıpkı diğer listede yaptığımız gibi bu sınıftaki liste ile gelen değişkeni değiştiriyoruz.

1
2
3
4
5
6
private List<String> keys;

public FirebaseAdapter(List<Movies> list,List<String> keys){
        this.list=list;
        this.keys=keys;
    }

Userviewholder içine gelip imagebutton nesnesi oluşturuyoruz. Ardından bunu karttaki ögeye bağlıyoruz.

1
2
3
4
5
6
7
8
9
10
11
12
class UserViewHolder extends RecyclerView.ViewHolder{
        TextView txt_film_adi;
        ImageButton txt_delete;


        private UserViewHolder(View itemView){
            super(itemView);

            txt_film_adi=itemView.findViewById(R.id.cardText);
            txt_delete=itemView.findViewById(R.id.cardDelete);
        }
    }

Historyfragment dosyasını açıyoruz. Aynı şekilde string tipinde bir liste oluşturuyoruz. Childeventlistener içinde gelen verilerdeki keyleri sırayla bu liste içine ekliyoruz.

1
2
3
4
5
public void onChildAdded(@NonNull DataSnapshot dataSnapshot, @Nullable String s) {
    list.add(dataSnapshot.getValue(Movies.class));
    keys.add(dataSnapshot.getKey());
    adapter.notifyDataSetChanged();
}

Firebaseadapter dosyasında onbindviewholder içine gelip veritabanı referansı oluşturuyoruz. Silme butonuna erişiyoruz. Butona click listener ekleyip tıklanmalarını yakalıyoruz. Click listener içinde referana child ekliyoruz. Child ile bağlandığımız düğümlerin alt düğümlerine erişebileceğiz. Child içine keys listesini veriyoruz. Keys listesine eklediğimiz kod sadece belirli bir sıradaki anahtara erişiyoruz. Buradaki i tıklanılan kartın listedeki sırası oluyor. Onun sonuna silme kodunu ekliyoruz.

1
2
3
4
5
6
userViewHolder.txt_delete.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                reference.child(keys.get(i)).removeValue();
            }
        });

Telefonumuzda çalıştırıp kodu test ediyoruz. Butona tıkladığımız zaman silinmemiş gibi gözükebilir. Başka bir sayfaya gidip geri gelindiği zaman silindiğini göreceksiniz. Dediğim gibi uygulamada silme işlemine gerek yok o yüzden bu yaptığımız kodları silebilirsiniz. Sadece bilgi amaçlı anlattım bu kısmı. İlerde devam ederken bu kısım kodlarımızda yer almayacaktır.

This post is licensed under CC BY 4.0 by the author.