Arama butonu
Bu konudaki kullanıcılar: 1 misafir, 1 mobil kullanıcı
8
Cevap
552
Tıklama
0
Öne Çıkarma
Adaptor Class'tan Parametre gönderme
S
10 yıl
Onbaşı
Konu Sahibi

Merhaba arkadaşlar. Projemde bir yerde takıldım ilk resimde gördügünüz OzelAdaptor içinde ki button' ı ChildActivity içerisinde nasıl kullanabilirim. Ayrıca textview tv2 yide çekmem gerekiyor..
Projemin mantıgı şu listView içerisinde bulunan meyvelerden button(ekle)'a basıldığında childactivity java kısmındaki texttoplamkaloriye yazdırmasini istiyorum.

1.
https://hizliresim.com/OZqJzQ

2.
https://hizliresim.com/5kdpEj

3.
https://hizliresim.com/2kgvqj

Arkadaşlar şimdiden teşkkür ederim yardımcı olamasanız bile düşünmeniz yeterli





< Bu mesaj bu kişi tarafından değiştirildi syyildirim -- 31 Temmuz 2015; 8:11:40 >

A
10 yıl
Yarbay

Hocam sorunu tam anlamadim ama sanirim listview daki butona tiklandiginda activity deki bir textview in değişmesini istiyorsunuz.

Bunun için Adapter in constructor ina bir listener koyup bunu adapter i activity de tanımlarken(yani instantiate ederken) orada listener i activity e geçirebilirsiniz.

Elimde hazır kod var akşama doğru post ederim hocam.



< Bu ileti mobil sürüm kullanılarak atıldı >
Bu mesaja 1 cevap geldi.

Bu mesajda bahsedilenler: @syyildirim
S
10 yıl
Yarbay

kardes kodları koysana buraya foto atarsan daha fazla yardım gorursun


Bu mesaja 1 cevap geldi.
S
10 yıl
Onbaşı
Konu Sahibi

avatar aynen abi yapmak istediğim o :)

Adopter kısmının getView'i;
public View getView(int position, View convertView, ViewGroup parent){
View satirView;
....
....
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
toplam = secenekler.getKalori() + toplam;
Toast.makeText(activity, secenekler.getIsim().toString() + " Seçtiniz...\nToplam= " + toplam, Toast.LENGTH_SHORT).show();

}
});
.....
.....
return satirView;
}

Hocam onClick içinde hesaplattıgım toplam'ı ChildActivity içerisindeki textView e atamak istiyorum.(ChildActivity; adoptor deki listView e deger gönderme işlemi yaptıgım activity) Yani xml de listView' in üstünde oluşturdugum textView'a adopterden gelen toplam degerini yazdırmak istiyorum..
Hocam bu arada çok tesekkürler





< Bu mesaj bu kişi tarafından değiştirildi syyildirim -- 29 Temmuz 2015; 16:15:34 >
Bu mesaja 1 cevap geldi.
A
10 yıl
Yarbay

Hocam adım adım anlatıyorum. Adapter'a bir listener koyacağız, listedeki butona dokunulduğunda bu listener yardıımıyla activity'e geçip oradan text'i güncelleyeceğiz.

Adapter'a bunları ekleyelim:

  
private OnItemClickListener mOnItemClickListener;

public interface OnItemClickListener {
void onItemClick(View view, int position); // buradaki parametlere activity'deki textview'a ne göndermek istiyorsanız onları yazın. Atıyorum "String kalori, String yemekAdi" vs.
}

// constructor'ımıza listener koyalım)
public Adapter(OnItemClickListener onItemClickListener) {
mOnItemClickListener = onItemClickListener;
}


Yine adapter içinde getView'i güncelleyelim:

public View getView(int position, View convertView, ViewGroup parent){ 
View satirView;
....
....
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mOnItemClickListener.onItemClick(v, position); // yine burada neyi yazdırmak istiyorsanız o bilgiyi activity'e yollayacağız. Mesela
// mOnItemClickListener.onItemClick(v, toplam)


Sonra activity'e geliyoruz, burada artık bilgiyi alacağız. Yani özetlemek gerekirse, butona basıldığında veriyi adapter'dan alıp activity'e bildiriyoruz interface yardımıyla.


adapter = new Adapter(getActivity(), getData(), new Adapter.OnItemClickListener() { // bunlar benim koddaki parametreler, sizde olmak zorunda değil. 
// sizde olması şart olan şey oradaki adapter.onclicklistener, onu hazırladık buraya geçiriyoruz
// benim constructor'da daha fazla parametre var yani örnek olsun diye koyuyorum, üstteki kodda onları yazmadım, kafanız karışmasın bu kod bu haliyle çalışmaz zaten
@Override
public void onItemClick(View view, int position) {
handleCardClicks(view, position);
// burada textView'i güncelleyebilirsiniz. İsterseniz bir public void method hazırlayın buraya onu yazın ki ben öyle yaptım, isterseniz direk burada gelen veriyi direk güncelleyin. Method yardımıyla yapmayı ben şahsen daha iyi buluyorum
}
});


Kod biraz karışık oldu farkındayım ama interface'ler böyle baş belası. Zor geldi diyorsanız EventBus tarzı bir yöntem kullanabilirsiniz ama interface'ler daha güvenilirdir.


Bu mesaja 1 cevap geldi.

Bu mesajda bahsedilenler: @syyildirim
S
10 yıl
Onbaşı
Konu Sahibi

Hocam çok teşekkürler yapabildim (:


Bu mesaja 1 cevap geldi.
A
10 yıl
Yarbay

Ne demek hocam, bana burada çok yardım ettiler ben de edeyim

Bu arada konu başlığını ve ilk mesajı güncellersen aynı sorunda müzdarip kişiler çözümü daha hızlı görebilir.


Bu mesaja 1 cevap geldi.

Bu mesajda bahsedilenler: @syyildirim
S
10 yıl
Onbaşı
Konu Sahibi

adapter = new Adapter(getActivity(), getData(), new Adapter.OnItemClickListener() { // bunlar benim koddaki parametreler, sizde olmak zorunda değil.
// sizde olması şart olan şey oradaki adapter.onclicklistener, onu hazırladık buraya geçiriyoruz
// benim constructor'da daha fazla parametre var yani örnek olsun diye koyuyorum, üstteki kodda onları yazmadım, kafanız karışmasın bu kod bu haliyle çalışmaz zaten
@Override
public void onItemClick(View view, int position) {
handleCardClicks(view, position);
// burada textView'i güncelleyebilirsiniz. İsterseniz bir public void method hazırlayın buraya onu yazın ki ben öyle yaptım, isterseniz direk burada gelen veriyi direk güncelleyin. Method yardımıyla yapmayı ben şahsen daha iyi buluyorum
}
});

Hocam şu kısmı biraz daha açıklayabilir misiniz?

protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_child);
ActionBar actionBar=getSupportActionBar();
actionBar.setDisplayHomeAsUpEnabled(true);


secenekler.add(new Secenekler("Elma", "100 gram", 52));
secenekler.add(new Secenekler("Armut", "100 gram", 52));
secenekler.add(new Secenekler("Çilek", "100 gram", 32));
secenekler.add(new Secenekler("Erik","100 gram",47));
secenekler.add(new Secenekler("Portakal", "100 gram", 47));
secenekler.add(new Secenekler("Mandalina","100 gram",50));
secenekler.add(new Secenekler("Kivi", "100 gram", 61));
secenekler.add(new Secenekler("Muz","100 gram",95));
secenekler.add(new Secenekler("Ananas", "100 gram", 59));
secenekler.add(new Secenekler("kapı", "100 gram", 59));


listView=(ListView)findViewById(R.id.listView);

OzelAdaptor adaptor=new OzelAdaptor(this,secenekler);
listView.setAdapter(adaptor);

//Buraya yazcm dmi
}
Bunun içine yazcam dmi


Bu mesaja 1 cevap geldi.
A
10 yıl
Yarbay

Keşke mesaji alintilasaydin hocam yeni gördüm.

Evet oraya, Activity icinde OzelAdaptor u instantiate ederken yazacaksin. Yani;

OzelAdaptor oa = new OzelAdaptor(new OzelAdaptor.onItemClickListener, ...) // diğer parametreleri de yazarsınız

gibi olacak. Çalışmazsa bütün kodu atin bir daha bakalim.



< Bu ileti mobil sürüm kullanılarak atıldı >


Bu mesajda bahsedilenler: @syyildirim
DH Mobil uygulaması ile devam edin. Mobil tarayıcınız ile mümkün olanların yanı sıra, birçok yeni ve faydalı özelliğe erişin. Gizle ve güncelleme çıkana kadar tekrar gösterme.