Ana ekrana döndüğünde listview yeniden yükleniyor.

+5 oy
19 Mart 2015 Kksal Stajyer (660 puan)   sordu
19 Mart 2015 Kksal düzenledi
Uygulamada 3 adet Activity var.

1. .anaekran.java (Ekrandaki Textboxt a göre veritabanında arama yapıp sonuçları listview e aktarıyor).

2 .Ayrıntı.java (Ana ekranda yeralan listview deki sonuçlara tıklanıldığında çalışan Activity).

3 bilgi.java (Uygulama hakkında birkaç bilginin yer aldığı Activity)

Adım adım anlayatım. anaekran Activity de textbox'a bir değer yazıp arama butonuna basıyorum. Veritabanı büyük olmasından dolayı sonuçları arayıp listviewe ektarması yaklaşık 3 sn sürüyor. Listviewdeki sonuçların herhangi birine tıklayıp ayrıntılarını gösteriyorum. Geri butonuna bastığımda ana ekrana dönerken 3sn bekletiyor yine(Ayrıntı ekranında). Yani Tıpkı arama yapmışım gibi yendiden listview i yüklüyor gibi.

Örneğin textbox içine sadece 'a' harfi yazdım arattım bu 5 sn sürüyor. Sonuçlardan birine tıklayıp ayrıntı penceresini açtım. Pencereyi kaparken yine 5 sn bekliyor.Sonra kapatıyor Bu bekleme işlemi sadece listview deki sonuçlara tıklayıp ayrıntı penceresi açılıp geri kapatmak istediğimde oluyor. Örneğin anaekran da birde bilgi diye bir Activity i çalıştıran buton var. Ona tıklayıp bilgi penceresini açıp geri kapadığında bekleme yapmıyor. Sadece listviewdeki sonuçlara tıklanıp pencere açtığında yapıyor.

 onActivityResult() da kullandım AsyncTask() da kullandım onResume() de kullandım ama ne yaparsam yapayım yeniden arama yapıyor geri geldiğimde. Nasıl çözülecek bu olay?

3 Cevap

+1 oy
19 Mart 2015 misafir   cevapladı
Gelen cevapları bi structure da tutarsan ve geri döndüğünde listview e onu basarsan sorunun çözülür.
19 Mart 2015 Kksal Stajyer (660 puan)   yorumladı
Bu bekleme işlemi sadece listview deki sonuçlara tıklayıp ayrıntı penceresi açılıp geri kapadığpında oluyor. Örneğin anaekran da birde bilgi diye bir Activity i çalıştıran buton var. Ona tıklayıp bilgi penceresini açıp geri kapadığında bekleme yapmıyor. Sadece listviewdeki sonuçlara tıklanıp pencere açtığında yapıyor.
+2 oy
19 Mart 2015 mustafasevgi Stajyer (580 puan)   cevapladı
onItemClick ve detay sayfasini kapattigin metodlari yazar misin? Yardimci olmaya calisayim.
+2 oy
19 Mart 2015 Kksal Stajyer (660 puan)   cevapladı
19 Mart 2015 Kksal düzenledi

 private class LoadViewTask extends AsyncTask<String, Integer, String>  
    {   
        @Override  
        protected void onPreExecute()  
        {  
        super.onPreExecute();

        ImageView bekle_img = (ImageView) findViewById(R.id.bekle);
        bekle_img.setVisibility(View.VISIBLE);

        }   
        @Override  
        protected String doInBackground(String... values)  
        {  
         
             kelime_tv = (EditText) findViewById(R.id.txt_ara_kelime);
               memberName = kelime_tv.getText().toString().trim();
               lv = (ListView) findViewById(R.id.listview_tabir_arama);
               cursor = KayitGetirAramabaslayan();
          return "";     
        }  
        @Override  
        protected void onProgressUpdate(Integer... values)  
        {  
            progressDialog.setProgress(values[0]);  
        }  
        @Override  
        protected void onPostExecute(String values)  
        {    
            
            from = new String[] { "_id", "baslik" };
             to = new int[] { R.id.list_tabir_id, R.id.list_tabir_baslik };
            adapter = new SimpleCursorAdapter(
                     anaekran.this, R.layout.tabir_ara_list, cursor, from, to);
            
         lv.setEmptyView(findViewById(android.R.id.empty));
       lv.setAdapter(adapter);
         lv.setOnItemClickListener(new OnItemClickListener() {
             @Override
             public void onItemClick(AdapterView<?> parent, View view,
                     int position, long id) {
                 katID_tv = (TextView) view.findViewById(R.id.list_tabir_id);
                 katname_tv = (TextView) view.findViewById(R.id.list_tabir_baslik);
                 String memberID_val = katID_tv.getText().toString();
                 String memberName_val = katname_tv.getText().toString().trim();
                 Intent modify_intent = new Intent(anaekran.this,tbrdetay.class);
                 modify_intent.putExtra("deg_tabir_adi", memberName_val);
                 modify_intent.putExtra("deg_tabir_id", memberID_val);
                 startActivityForResult(modify_intent,0);
             }});
          
          
        ImageView bekle_img = (ImageView) findViewById(R.id.bekle);
        bekle_img.setVisibility(View.GONE);
        
       
      
        } 
    }

Yukarıdaki kodlar ilk Activity de  listviewe listenin aktarılmasını sağlıyor.  

@Override
        public void onBackPressed() {
        
                Intent returnIntent = new Intent();
                setResult(RESULT_CANCELED, returnIntent);        
                finish();
                super.onBackPressed();
     

 Bu kodlar ikinci Activity de(Ayrıntılar sayfası) geri butonuna basıldığında çalışan kodlar. Geriye değer döndürerek kapıyorum Activityi

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {

          if (requestCode == 1) {

             if(resultCode == RESULT_OK){      
                 //Update List         
             }
             if (resultCode == RESULT_CANCELED) {   
                
             }
          }
        }

Bu da ilk Activity de yer alan Activity ye geri dönüldüğünde çalışan olaylar.

Dediğim gibi sadece listview de ki sonuçlara tıklanılıp yeni pencere açıp geri ana Activitye dönerken donma yaşanıyor. Sabaha kadar uğraştım ana Activitye dönüldüğünde sistemin yaptığı iş listviewe adapteri geri yüklüyor. Örneğin 

   if (resultCode == RESULT_CANCELED) {   
                 lv.setAdapter(null); 
             }

yaptığımda yani geri ana ekrana döndüğünde listviewe null değerini yüklüyorum bekleme yapmıyor çünkü listviewe boş değer yüklüyoruz. lv ye mevcut adapteri yükleiğimde bekliyor yine. 

Yine aynı şekilde diyelim arama yaptık ilk ekranda ama herhangi bir sonuca tıklamadık. Telefonda masaüstü linkine tıkladık uygulamayı arka plana arttık daha sonra uygulamayı tekrar açtık yine önce bekliyor sonra uygulama ekranını açıyor tıpkı arama butonuna tıklamışız gibi.

Onresume ve onpause olaylarını da denedim ama nafile.

İstersen video veya apk yı gönderip daha net görmeni sağlayabilirim. 1 hafta oldu çözemedim olayı.

...