"Enter"a basıp içeriğe geçin

Android Studio’da To-Do List Yapımı

Uygulamanın resimleri:

Bir tane Veritabani adında sınıf oluşturalım. İçerisini aşağıdaki gibi düzenleyelim.

/*SQLiteOpenHelper'dan kalıtalım.*/
public class Veritabani extends SQLiteOpenHelper {

    /*Veritabanı için ad, tablo adı, versiyon ve sütun için değişken oluşturalım.*/
    private static final String DB_NAME="Veritabani";
    private static final int DB_VER = 1;
    public static final String DB_TABLE = "Gorev";
    public static final String DB_SUTUN = "GorevIsmi";


    public Veritabani(Context context) {
        /*Yukarıda tanımlanan değişkenleri kullanalım*/
        super(context, DB_NAME, null, DB_VER);
    }

    @Override
    public void onCreate(SQLiteDatabase db) {
        /*Tablo oluşturmak için sorgumuzu yazalım. %s olan yerlere virgülden sonra yazılan değişkenlerin geleceği belirtiliyor.*/
        String sorgu = String.format("CREATE TABLE %s (ID INTEGER PRIMARY KEY AUTOINCREMENT,%s TEXT NOT NULL);", DB_TABLE, DB_SUTUN);
        /*SQL kodu çalıştırılıyor.*/
        db.execSQL(sorgu);
    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        /*Veritabanında oluşan her değişiklik için veritabanında kayıtlı olan tabloyu silip yerine yenisini oluşturarak güncelleme işlemini yapıyor.*/
        String sorgu = String.format("DELETE TABLE IF EXISTS %s", DB_TABLE);
        /*Yazılan sorguyu uyguluyor.*/
        db.execSQL(sorgu);
        /*onCreate'e göndererek tabloyu oluşturuyor.*/
        onCreate(db);
    }

    public void yeniGorevEkle(String gorev){
        /*getWritableDatabase ile yazılabilir/okunabilir bağlantı oluşturuluyor.*/
        SQLiteDatabase db = this.getWritableDatabase();
        /*Veritabanı işlemleri için ContentValues oluşturuluyor.*/
        ContentValues values = new ContentValues();
        /*MainActivity'den gelen gorev değerini alarak veritabanına kaydediyoruz.*/
        values.put(DB_SUTUN, gorev);
        /*Veritabanına satır eklemek için kullanılan kod.*/
        db.insertWithOnConflict(DB_TABLE,null, values, SQLiteDatabase.CONFLICT_REPLACE);
        /*Veritabanı bağlantısı kapatılıyor.*/
        db.close();
    }

    public void gorevSil(String gorev){
        /*getWritableDatabase ile yazılabilir/okunabilir veritabanı bağlantısı oluşturuluyor.*/
        SQLiteDatabase db = this.getWritableDatabase();
        /*MainActivity'den gelen gorev değerini silmek için aşağıdaki sorgu yazılıyor.*/
        db.delete(DB_TABLE,DB_SUTUN + " = ?", new String[]{gorev});
        /*Veritabanı bağlantısı kapatılıyor.*/
        db.close();
    }

    /*Veritabanına kaydedilen tüm verileri çağırmak için aşağıdaki metot kullanılıyor. Tüm verileri ArrayList içine kaydediyor.*/
    public ArrayList<String> tumGorevleriGetir(){
        /*Bir tane ArrayList listesi oluşturuluyor.*/
        ArrayList<String> gorevListesi = new ArrayList<>();
        /*getReadableDatabase ile sadece okunabilir bir veritabanı bağlantısı oluşturuluyor.*/
        SQLiteDatabase db = this.getReadableDatabase();
        /*Cursor ile sorgumuzu yapıyoruz. Tablonun içindeki tüm sütunları cursor'a aktarıyoruz.*/
        Cursor cursor = db.query(DB_TABLE, new String[]{DB_SUTUN},null,null,null,null,null);
        /*Sonraki kayıt olmayana kadar dönmeye devam ediyor.*/
        while(cursor.moveToNext()){
            /*Her sütunun sırasını alıyor...*/
            int index = cursor.getColumnIndex(DB_SUTUN);
            /*...gorevListesi listesine aktarıyor.*/
            gorevListesi.add(cursor.getString(index));
        }
        /*cursor ve veritabanı kapatılıyor. gorevListesi döndürülüyor.*/
        cursor.close();
        db.close();
        return gorevListesi;
    }
}

 

Tasarım ayarlarından kaçınarak sade halde activity_main.xml dosyasını atıyorum.

<?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=".MainActivity">

    <ListView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/gorevListView"/>

</RelativeLayout>

 

row.xml ile eklenen görevler için bir tane TextView ve silmek içinde bir tane Button tanımlaması yapılıyor. Layout klasörü altına tanımlayalım.

<?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="match_parent">

    <TextView
        android:id="@+id/gorev_basligi"
        android:text="Örnek"
        android:textSize="20sp"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />

    <Button
        android:id="@+id/btnDelete"
        android:text="SİL"
        android:layout_alignParentEnd="true"
        android:layout_alignParentRight="true"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:onClick="gorevSil" />

</RelativeLayout>

 

Menüde bulunan + işareti için bir tane daha xml oluşturacağız. Bunun için res klasörüne sağ tık ile new -> Android Resource File seçin. File Name kısmını menu, Resource Type kısmını Menu seçin ve ok diyerek işlemi bitirin.

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

    <item
        android:id="@+id/yeni_gorev_ekle"
        android:icon="@android:drawable/ic_menu_add"
        android:title="Yeni Görev Ekle"
        app:showAsAction="always"
        />
</menu>

 

Icon kısmında var olan bir simge kullanıyoruz. showAsAction ile actionBar üstünde sürekli gözükmesini sağlıyoruz. MainActivity.java sınıfını açıklamaları ile birlikte aşağıya bırakıyorum.

public class MainActivity extends AppCompatActivity {

    /*Veritabani nesnesi, adapter ve listView tanımlayalım.*/
    Veritabani veritabani;
    ArrayAdapter<String> mAdapter;
    ListView gorevListesi;

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

        /*Veritabani nesnesi oluşturalım.*/
        veritabani = new Veritabani(this);
        /*Görevlerin yazılacağı listView bağlantısını yapalım. gorevListView, activity_main.xml'de tanımlanmıştı.*/
        gorevListesi = (ListView) findViewById(R.id.gorevListView);
        /*Tüm görevleri getirmesi için kullanacağımız metot.*/
        tumGorevleriGetir();
    }

    private void tumGorevleriGetir() {
        /*Veritabanı sınıfında yazılan tumGorevleriGetir metodundan kayıtların hepsini listeye aktardık.*/
        ArrayList<String> gorevArrayListesi = veritabani.tumGorevleriGetir();
        /*Adapter null olana kadar sorgu çalışıyor.*/
        if (mAdapter == null){
            mAdapter = new ArrayAdapter<String>(this, R.layout.row, R.id.gorev_basligi, gorevArrayListesi);
            gorevListesi.setAdapter(mAdapter);
        }
        else{
            mAdapter.clear();
            mAdapter.addAll(gorevArrayListesi);
            mAdapter.notifyDataSetChanged();
        }
    }

    /*menu.xml'li tanımlamak için onCreateOptionMenu'yü Override edelim.*/
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        /*xml'i bağlayalım.*/
        getMenuInflater().inflate(R.menu.menu,menu);
        /*İkon rengini beyaz yapalım. return hariç alttaki kodları yapmasanızda olur.*/
        Drawable icon = menu.getItem(0).getIcon();
        icon.mutate();
        icon.setColorFilter(getResources().getColor(android.R.color.white), PorterDuff.Mode.SRC_IN);
        return super.onCreateOptionsMenu(menu);
    }

    /*Menüden seçilen elemanlar için yapılacak işlemleri onOptionsItemSelected içerisinde belirtiyoruz. Yani ekranda + tuşuna basınca yapılacakları belirteceğiz.*/
    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        /*Menüde tıklanan itemin id değerini alıyor.*/
        switch (item.getItemId()){
            /*Alınan id değeri yeni_gorev_ekle ise alttaki işlemleri yapacak.*/
            case R.id.yeni_gorev_ekle:
                /*Yeni bir tane EditText oluşturuyor.*/
                final EditText gorevEditText = new EditText(this);
                /*Dialog ekranı oluşturuluyor.*/
                AlertDialog dialog = new AlertDialog.Builder(this)
                        /*Dialog ekranının başlığı:*/
                        .setTitle("Yeni Görev Ekle")
                        /*Dialog ekranının mesajı*/
                        .setMessage("Ne yapmak istiyorsun?")
                        /*Dialog ekranında yukarıda oluşturulan EditText'i gösteriyoruz.*/
                        .setView(gorevEditText)
                        /*Olumlu cevap butonuna basılırsa (yani sağ taraftakine) yapılacak işlemler tanımlanıyor.*/
                        .setPositiveButton("Ekle", new DialogInterface.OnClickListener() {
                            @Override
                            public void onClick(DialogInterface dialog, int which) {
                                /*EditText'ten alınan değeri gorev değişkenine aktarıyoruz.*/
                                String gorev = String.valueOf(gorevEditText.getText());
                                /*veritabanında oluşturduğumuz yeniGorevEkle metoduna bu değeri gönderim ekleme işlemini yapıyoruz.*/
                                veritabani.yeniGorevEkle(gorev);
                                /*Her görev eklendiğinde ekrandaki görevler otomatik yenilensin diye tumGorevleriGetir metodunu tekrar tanımlıyoruz.*/
                                tumGorevleriGetir();
                            }
                        })
                        /*Olumsuz butona yani soldakine basılırsa ekranı kapatıyor.*/
                        .setNegativeButton("Vazgeç",null)
                        .create();
                /*Dialog ekranını gösteriyoruz.*/
                dialog.show();
                return true;
        }
        return super.onOptionsItemSelected(item);
    }

    /*Sil butonuna basılınca yapılacak olan işlemleri yapıyoruz.*/
    public void gorevSil(View view){
        View parent = (View)view.getParent();
        TextView gorevEditText = (TextView)parent.findViewById(R.id.gorev_basligi);
        String gorev = String.valueOf(gorevEditText.getText());
        veritabani.gorevSil(gorev);
        tumGorevleriGetir();
    }
}

Projenin kaynak kodları aşağıda:

https://github.com/Osmananilozcan/ToDoList

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

This site uses Akismet to reduce spam. Learn how your comment data is processed.