Uygulamamızda, RealmDb’ de kayıtlı listemizden seçili olan veriye ulaşıp aksiyon yapma işlemi hazırlayacağız. Kullanıcıya hangi datanın sipariş numarasına ulaşması istediğini soracağız. Herhangi bir seçeneğe tıklandığında ve işlemi tamamla dediğinde AlertDialog kullanarak kaç seçili data varsa ekrana basacağız. Burada basit ve kolay olan durum ise bir class kurup BaseAdapter’ı extends
etmememizdir. Hazırsanız kodlamaya başlayalım.
Olaya öncelikle xml kodlarımızla başlayalım ben Fragmetler üzerinde çalıştığım için bir emty fragment kuruyorum daha sonra otomotik şekilde oluşan fragmentin layout kısmına aşağıdaki kodlarımı yazıyorum. Aşağıdaki kodlarıma dikkat ederseniz bir cb_check_all adında CheckBox oluşturdum daha sonra kullanıcı olurda tümünü işaretlemek isterse diye bunu burada tanımlıyorum…
<LinearLayout 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"
android:orientation="vertical"
tools:context="com.example.palsis.fragment.NomDonusFragment">
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="@dimen/spacing_xxl"
android:padding="@dimen/spacing_xs">
<Button
android:id="@+id/nomDonusBtn"
android:layout_width="200dp"
android:layout_height="wrap_content"
android:background="#a6a9b6"
android:text="Nom Dönüş"
android:textColor="#fff"
android:textStyle="bold" />
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="200dp"
android:padding="6dip"
android:gravity="center_vertical">
<CheckBox
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:layout_marginRight="5dp"
android:id="@+id/cb_check_all"/>
<TextView
style="@style/li_header"
android:text="@string/tumunu_isaretle" />
</RelativeLayout>
</RelativeLayout>
<View
style="@style/li_divider"
android:layout_marginLeft="@dimen/spacing_zero" />
<LinearLayout
android:id="@+id/ln_nomDonus"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_above="@+id/nomDonus"
android:orientation="vertical">
<ListView
android:id="@+id/lw_nomDonus"
style="@style/listView" />
</LinearLayout>
</LinearLayout>
Daha sonra sizler bu layout’ da oluşturduğunuz id’leri fragment veya Activity içerisinde tanımlamalarını yapın ben olayın ana karakterleri üzerinde durmak istiyorum, hem zaman kaybı olmaması hem de konuda bütünlük sağlamak adına. Şimdi Fragment kısmına geçiyoruz ve tanımladığım listView’ imizi set edecek dataları oluşturmaya başlıyoruz. Ben burada başta da söylediğim gibi RealmDb içerisindeki verileri kullanarak devam ediyorum sizler isterseniz manuel veya sqlLite da bulunan datalarınızı set edebilirsiniz. Devam edecek olursak ben bir fonksiyon oluşturdum kodumun okunurluğu açısından. Daha sonra siparisList adından bir ArrayList() creat ettim ve DB’ de bulunan dataları lookup ile dönüp istediğim dataların Sipariş No’ sunu ve Araçtaki Torba’ sını siparisList’ e ekledim. Sonra adapter adından bir ArrayAdapter oluşturdum. Burada önemli olan konu tanımlama yaparken Context’ imizden sonra layout’ dan çağırdığımız list’imizin adının simple_list_item_multiple_choice olmasıdır eğer Checkbox kullanmak istiyorsak bu layoutu seçmemiz gerekli. Son olarak da listView adapterımza set ederek ListViewi set etmiş oluyoruz.
public void setList() {
siparisSpoolerRealmList = realm.where(SiparisSpoolerRealm.class).findAll();
for (int i = 0; i < siparisSpoolerRealmList.size(); i++) {
siparisList.add("Sipariş No: " + siparisSpoolerRealmList.get(i).getSiparisNo() + " / Araçtaki Torba: " + siparisSpoolerRealmList.get(i).getAractakiTorbalar());
}
ArrayAdapter<SiparisSpoolerRealm> adapter = new ArrayAdapter<>
(getContext(), android.R.layout.simple_list_item_multiple_choice, android.R.id.text1, siparisList);
lw_nomDonus.clearChoices();
lw_nomDonus.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);
lw_nomDonus.setAdapter(adapter);
}
Bir sonraki aşama ise tıklanan listenin sipariş numarasına ulaşarak geri dönüşü String tipinde bir fonksiyona atamak olacak. Burada tıklanan listenin pozisyonuna ulaşıp, o pozisyonda bulunan verinin String’ ini çekiyoruz ve siparisNo adında bir String ile geri dönüyoruz.
public String getCheckedOkumaList() {
int len = lw_nomDonus.getCount();
SparseBooleanArray checkedList = lw_nomDonus.getCheckedItemPositions();
for (int i = 0; i < len; i++) {
if(!checkedList.get(i)) continue;
String spNo = lw_nomDonus.getItemAtPosition(i).toString().substring(11, 16).trim();
siparisNo += spNo + ",";
}
return siparisNo;
}
Birde layout oluştururken bahsettiğim tümünü seç checkbox ı içinde bir kaç işlem yapalım. Bunu da onCheckAll adında ayrı bir fonksiyon içerisinde gerçekleştirelim. Çok basitçe cb_check_all checkbox a tıklandığında isChecked() == true ise listView da bulunan tüm kutuları check’ le eğer true değilse hepsinin chek’ ini kaldır diyoruz.
public void onCheckAll(boolean isChecked) {
cb_check_all.setOnClickListener(v -> {
if(cb_check_all.isChecked() == true) {
for (int i = 0; i < siparisSpoolerRealmList.size(); i++) {
lw_nomDonus.setItemChecked(i, isChecked);
}
} else {
for (int i = 0; i < siparisSpoolerRealmList.size(); i++) {
lw_nomDonus.setItemChecked(i, false);
}
}
});
}
Geldik son işlemimize actionsClick adında bir fonksiyon tanımlayarak, nomDonusBtn butonuna tıklandığında yapmak istediğimiz aksiyonları yapalım. selectedItemCount ile bir kontrol yapıyorum daha sonra siparisNumarasi adında bir string tanımlayarak getCheckedOkumaList() fonksiyonundan dönen veriyi atıyoruz. Veri boş değil ise Helper sınıfımda kurduğum bir AlertDialog u çağırarak işlemlerimi gerçekleştiriyorum.
public void actionsClick() {
nomDonusBtn.setOnClickListener(v -> {
int selectedItemCount = lw_nomDonus.getCheckedItemCount();
if(selectedItemCount == 0) return;
String siparisNumarasi = "";
siparisNumarasi = getCheckedOkumaList();
if(!siparisNumarasi.equals("")) {
DialogHelper.showWarning(getContext(), getContext().getString(R.string.nom_donus_process_dialog_text), new NomDonusClickListener(getContext(), true,
siparisNumarasi), "Evet", "Hayır", "");
}
});
}
Umarım işinize yarayacak bir yazı olmuştur. Hem checkList kullanmayı hem de kompleks bir yapı kurmadan basitçe adapter kullanmayı öğrenmiş olduk. Herkese iyi okumalar ve iyi çalışmalar dilerim.