2011-08-08 6 views
5

मैं नीचे दिए गए कोड में उल्लिखित ListView के क्लिक ईवेंट पर प्रगति संवाद डालने की कोशिश कर रहा हूं लेकिन मुझे त्रुटि मिल रही है "WindowManager$BadTokenException: Unable to add window -- token [email protected] is not valid; is your activity running?" क्या आप मुझे इसके लिए कोई समाधान दे सकते हैं?

कोड

final ListView lv1 = (ListView) findViewById(R.id.list); 
    lv1.setAdapter(new EfficientAdapter(this)); 

    lv1.setTextFilterEnabled(true); 

    lv1.setOnItemClickListener(new OnItemClickListener() { 
     public void onItemClick(AdapterView<?> a, View v, 
       final int position, long id) { 
      final ProgressDialog pd = ProgressDialog.show(Add_Entry.this, 
        "", "Please Wait...."); 
      new Thread() { 
       public void run() { 

        if (lv1.getItemAtPosition(position).equals(0)) { 

         Intent edit = new Intent(getApplicationContext(), 
           SourceOfStress.class); 
         TabGroupActivity parentActivity = (TabGroupActivity) getParent(); 
         edit.putExtra("currActi", "AddEntry"); 
         parentActivity.startChildActivity("SorceOfStress", 
           edit); 

        } 
        if (lv1.getItemAtPosition(position).equals(1)) { 
         Intent edit = new Intent(getParent(), 
           SourceOFSymptoms.class); 
         TabGroupActivity parentActivity = (TabGroupActivity) getParent(); 
         edit.putExtra("currActi", "AddEntry"); 
         parentActivity.startChildActivity(
           "SourceOFSymptoms", edit); 
        } 
        if (lv1.getItemAtPosition(position).equals(2)) { 
         Intent edit = new Intent(getParent(), 
           Stress_Resilliance.class); 
         TabGroupActivity parentActivity = (TabGroupActivity) getParent(); 
         edit.putExtra("currActi", "AddEntry"); 
         parentActivity.startChildActivity(
           "Stress_Resilliance", edit); 
        } 
        pd.dismiss(); 
       } 
      }.start(); 
     } 

    }); 

मेरे फ़ाइल नाम Add_Entry.java है और त्रुटि इस

final ProgressDialog pd = new ProgressDialog(Add_Entry.this).show(Add_Entry.this,"","Please wait...", true); 

उत्तर

4

तुम एक धागे से यूआई अद्यतन करने के लिए कोशिश कर रहे हैं अपने कोड की जगह का प्रयास करें। आप ऐसा नहीं कर सकते

यूआई घटकों को अद्यतन करने के लिए Handler mechanism का उपयोग करें।

वेबसाइट से लिया गया कोड: यहां हैंडलर क्लास का उपयोग पृष्ठभूमि थ्रेड में प्रोग्रेसबार दृश्य को अपडेट करने के लिए किया जाता है।

package de.vogella.android.handler; 

import android.app.Activity; 
import android.os.Bundle; 
import android.os.Handler; 
import android.view.View; 
import android.widget.ProgressBar; 
import android.widget.TextView; 

public class ProgressTestActivity extends Activity { 
    private Handler handler; 
    private ProgressBar progress; 
    private TextView text; 


/** Called when the activity is first created. */ 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 
    progress = (ProgressBar) findViewById(R.id.progressBar1); 
    text = (TextView) findViewById(R.id.textView1); 

    } 

    public void startProgress(View view) { 
    // Do something long 
    Runnable runnable = new Runnable() { 
     @Override 
     public void run() { 
     for (int i = 0; i <= 10; i++) { 
      final int value = i; 
      try { 
      Thread.sleep(2000); 
      } catch (InterruptedException e) { 
      e.printStackTrace(); 
      } 
      progress.post(new Runnable() { 
      @Override 
      public void run() { 
       text.setText("Updating"); 
       progress.setProgress(value); 
      } 
      }); 
     } 
     } 
    }; 
    new Thread(runnable).start(); 
    } 

} 
+0

मुझे लगता है कि लेख का यह हिस्सा चला गया है । –

+0

@ ब्रायस मैंने इसे सही किया है। ऐसा लगता है कि वोगाला ने अपनी वेबसाइट को फिर से व्यवस्थित किया। – Reno

0

उपयोग लाइन में आता है खराब संदर्भ संदर्भ। इससे बचने के लिए,

ProgressDialog.show(Add_Entry.this, "", "Please Wait...."); 
इस के साथ

,

ProgressDialog.show(v.getRootView().getContext(), "", "Please Wait...."); 
+0

ओह प्रिय रसेल जब पीडी कैसे हम एक मूल्य के पीडी के लिए? (मेरी जानकारी के अनुसार) –

+0

Oh.really पुन: असाइन कर सकते हैं की तुलना में अंतिम के रूप में परिभाषित किया जाता है? Above.Thing आप देखभाल करने के लिए का उपयोग कर ProgressDialog वस्तु पैदा कर रही है है की तरह का प्रयोग करें नया – Rasel

+1

@ जिग्नेश Ansodariya आप एक गलत संदर्भ का उपयोग कर रहे हैं, तो सही संदर्भ का उपयोग करने की कोशिश करें। –

3
WindowManager$BadTokenException 

अधिकांशतः इसका कारण यह होता है की तरह

ProgressDialog.show(Add_Entry.this, 
        "", "Please Wait...."); 
+0

ठीक है लेकिन इस कोशिश से मुझे एक और त्रुटि मिली है जैसे "कारण: java.lang.RuntimeException: थ्रेड के अंदर हैंडलर नहीं बना सकता है जिसे Looper.prepare() " लाइन पैरेंट एक्टिविटी.स्टार्ट चाइल्डएक्टिविटी ("SorceOfStress", पर नहीं कहा जा सकता है \t \t \t \t \t \t \t \t संपादित करें); –

+0

जिसका मतलब है कि आप हैंडलर का उपयोग नहीं कर रहे हैं। मेरा उत्तर यहां देखें। Http://stackoverflow.com/questions/6894698/rotating-wheel-progress-dialog-while-deleting-folder-from-sd-card/6894744#6894744 –

संबंधित मुद्दे