2016-03-31 24 views
0

Android'de geçebileceğiniz bir dizi iletişim menüsü oluşturarak Android'de bir USSD etkileşimine girmeye çalışıyorum. Şu anda, (on here bana yardımcı olan bir kullanıcı için teşekkürler!) Ben iletişim kutuları arasında, her iletişim arasında 2 saniye boyunca çalışan "USSD kod çalışıyor ..." yazan bir ilerleme iletişim kutusu var. Şimdi, yine de, benim sorunum, ilerledikten sonra ilerlemeyi iptal edemem. Şimdi, iletişim kutularını tamamlamayı bitirdiğimde, hala açık ve çalışır durumda olan ilerleme iletişim kutusunun birkaç örneği vardır. Kodda progress.cancel() komutunu bir yere eklemem gerektiğini biliyorum, ancak bunu denediğim her yer, ilerleme iletişim kutusunun tümünü çalıştırmasını engelliyor gibi görünüyor. İlerlemeyi İptal Et İletişim kutuları arasında çalıştırdıktan sonra

Runnable progressRunnable; 

public void FirstScreen() { 
    AlertDialog.Builder builder = new AlertDialog.Builder(this); 
    // Get the layout inflater 
    LayoutInflater inflater = this.getLayoutInflater(); 

    // Inflate and set the layout for the dialog; pass null as the parent view because its going in the dialog layout 
    final View dialogView = inflater.inflate(R.layout.number_response_dialog, null); 
    builder.setView(dialogView) 
      .setMessage(R.string.MainMenuText) 
        // Add action buttons 
      .setPositiveButton(R.string.send, new DialogInterface.OnClickListener() { 
       @Override 
       public void onClick(DialogInterface dialog, int id) { 
        // Send number to next dialog 
        String choice = getMenuChoice(dialogView); 
        if (choice.equals("5")) { 
         //Go to FirstTimeUse menu 
         progressRunnable = new Runnable() { 

          @Override 
          public void run() { 
           FirstTimeUse(); 
          } 
         }; 
         USSDprogressDialog(progressRunnable); 
        } else if (choice.equals("6")) { 
         //Something else 
        } else { 
         //Do nothing 
         dialog.dismiss(); 
        } 
       } 
      }) 
      .setNegativeButton(R.string.cancel, new DialogInterface.OnClickListener() { 
       public void onClick(DialogInterface dialog, int id) { 
        // End session 
        dialog.dismiss(); 
       } 
      }); 
    AlertDialog dialog = builder.create(); 
    dialog.show(); 
} 

Ve gerçek ilerleme iletişim yardımcı yöntemi: Ben USSDProgressDialog yönteminin sonunda yanı sıra USSDProgressDialog çalıştırılan tüm diyaloglar içinde dahil çalıştı

public void USSDprogressDialog(Runnable runnable) { 
    final ProgressDialog progress = new ProgressDialog(this); 
    progress.setMessage("USSD code running..."); 
    progress.show(); 

    Handler handler = new Handler(); 
    handler.postDelayed(runnable, 2000); 
} 

. Zamanlayıcı bittikten sonra her seferinde iptal edecek şekilde başka nereye ekleyebilirim? Teşekkür ederim!

+0

Hangi zamanlayıcıyı gösteriyorsunuz? –

+0

USSDProgressDialog yönteminde bulunan, en sonunda 2 saniye boyunca runnable geciktiren işleyicidir. (Gerçek bir "zamanlayıcı" değil ama işe yarıyor) – notchopra

cevap

0
final ProgressDialog progress = new ProgressDialog(this); 

Bunu faaliyetlerinin tüm diğer işlevleri erişilebilir, böylece USSDprogressDialog fonksiyonun dışında ilerleme diyalog bildirimi koymak gerekir. Küresel olarak ilerleme diyaloğunu başlat.

Şimdi olumlu düğmenin onClickListener bu örnek kodunu kullanmayı deneyin.

if (choice.equals("5")) { 
    //Go to FirstTimeUse menu 
    progressRunnable = new Runnable() { 
     @Override 
     public void run() { 
      FirstTimeUse(); 
      // Now cancel the progress dialog here. 
      if(progress != null) progress.cancel(); 
     } 
    }; 

    USSDprogressDialog(progressRunnable); 
} 
İlgili konular