Şimdi Ara

Adaptor Class'tan Parametre gönderme

Daha Fazla
Bu Konudaki Kullanıcılar: Daha Az
2 Misafir - 2 Masaüstü
5 sn
9
Cevap
0
Favori
508
Tıklama
Daha Fazla
İstatistik
  • Konu İstatistikleri Yükleniyor
0 oy
Öne Çıkar
Sayfa: 1
Giriş
Mesaj
  • 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 >







  • syyildirim S kullanıcısına yanıt
    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ı >
  • kardes kodları koysana buraya foto atarsan daha fazla yardım gorursun
  • 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 >




  • syyildirim S kullanıcısına yanıt
    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.




  • Hocam çok teşekkürler yapabildim (:
  • syyildirim S kullanıcısına yanıt
    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.
  • 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




  • syyildirim S kullanıcısına yanıt
    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ı >
  • 
Sayfa: 1
- x
Bildirim
mesajınız kopyalandı (ctrl+v) yapıştırmak istediğiniz yere yapıştırabilirsiniz.