Soru & Cevap

Arama Sonucu Bozulan Listview'den açılan activity

05.12.2017 - 04:05

Değerli arkadaşlar merhabalar; çalıştığım kurum için bir uygulama geliştirmeye çalışıyorum. Bunun için verdiğimiz eğitimlerin olduğu bir listview kurdum, listviewden ilgili eğitimi seçince açılıyor ve eğitim hakkında bilgi veren ekran geliyor. Buraya kadar problem yok. Listview'de arama yapmak için bir edit text oluşturdum. Arama kısmına yazdığım listview elemanı da geliyor buraya kadar sıkıntı yok. Ama arama sonucunda gelen listview öğesine tıklayınca tıkladığım eğitimin değil, arama yapılmadan görünen listede yani ana listedeki sıraya göre açıyor. Yani örnekle anlatmak gerekirse. Diyelim ki 3 eğitim var;

1- X Eğitimi

2- Y Eğitimi

3- Z Eğitimi

Y eğtimi diye arama yaptığımda Y Eğitimi 1. sıraya geldiği için, aslında X Eğitimine ait olan Activity açılıyor. 

Yardımcı olabilirseniz gerçekten çok sevinirim. Kodlar ise şöyle;

       lst.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {

                if(position==0){

                    Intent myintent = new Intent(view.getContext(),EgitimFaaliyet.class);
                    startActivityForResult(myintent,0);

                }

                if(position==1){

                    Intent myintent = new Intent(view.getContext(),HizmetIciEgt.class);
                    startActivityForResult(myintent,1);
                }

                if(position==2){

                    Intent myintent = new Intent(view.getContext(),Uluslararasi.class);
                    startActivityForResult(myintent,2);
                }

              

        });

        lst.setAdapter(new ArrayAdapter<String>(context,android.R.layout.simple_list_item_1,android.R.id.text1, list));
        etFilter.addTextChangedListener(new TextWatcher() {
            @Override
            public void beforeTextChanged(CharSequence s, int start, int count, int after) {

            }

            @Override
            public void onTextChanged(CharSequence s, int start, int before, int count) {
                ArrayList <String> tempList = new ArrayList<>();
                for (int i = 0; i < list.size(); i++){
                    if (list.get(i).toUpperCase().contains(s.toString().toUpperCase())){
                        tempList.add(list.get(i));

                    }
                }

                if (tempList != null && tempList.size() > 0){
                    lst.setAdapter(new ArrayAdapter<String>(context,android.R.layout.simple_list_item_1,android.R.id.text1, tempList));


                }


            }

            @Override
            public void afterTextChanged(Editable s) {

            }
        });

 

 

 

Tahminime göre 

"  if(position==2){

                    Intent myintent = new Intent(view.getContext(),Uluslararasi.class);
                    startActivityForResult(myintent,2);" ısmında if(position==2) yerine başka bir komut gelmeli ama bu kısmı çözemedim, fazla kodlama bilgim olmadığından. Yardımcı olursanız çok sevinrim. Saygılar.

6 Görüntülenme

2 Cevap

Sitedeki sorulara cevap verebilmek için giriş yapın ya da üye olun.

Profile picture for user sercanhcoban
sercanhcoban
16.12.2017 - 02:04

Çok teşekkür ederim.

picture-7541-1521024507.jpg
burhanaras
07.12.2017 - 08:24

 

Merhaba,

Eğitimlerinin olduğu listenin adının list olduğunu farzedelim.

       lst.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {

                Egitim egitim = list.get(position);
                Intent myintent = new Intent(view.getContext(),EgitimFaaliyet.class);
                myintent.putSerializableExtra("Egitim", egitim);
                startActivity(myintent);              

        });

Burada detay aktivitesine position değerini değil, direkt eğitim objesini yolla. Objeyi yollamak istemezsen de eğitimin id'sini yolla, Detay aktivitesi içerisinde o id ile yeniden çekersin.

Detay aktivity içinden de şu şekilde alabilirsin eğitimi:


if(getIntent.getExtras()!= null){
  Egitim egitim = getIntent().getSerializableExtra("Egitim");
}

 

İlerleyen zamanlarda Activity'ler arası data aktarımı için şu yazıyı inceleyebilirsin:  

https://gelecegiyazanlar.turkcell.com.tr/blog/activity-ve-fragment-cagirmanin-dogru-yontemi

Başarılar..