2012-02-06 14 views
6

मुझे अपने यूआई को हर सेकेंड रननेबल/हैंडलर से अपडेट करने में थोड़ी मदद चाहिए। मैं इस कोड का उपयोग कर रहा:हैंडलर से एंड्रॉइड अपडेट ui हर दूसरे

Runnable runnable = new Runnable() { 
     @Override 
     public void run() { 
       handler.post(new Runnable() { 
        @Override 
        public void run() { 

         prBar.setProgress(myProgress); 
         y = (double) ((double) myProgress/ (double) RPCCommunicator.totalPackets)*100; 
         txtInfoSync1.setText(Integer.toString((int)y) + "%"); 
         prBar.setMax(RPCCommunicator.totalPackets); 

         int tmp = totalBytesReceived - timerSaved; 
         Log.w("","totalBytesReceived : "+totalBytesReceived + " timerSaved : "+timerSaved); 
         Log.w("","tmp : "+tmp); 

         if (avgSpeedCalc.size() > 10) 
         { 
          avgSpeedCalc.remove(0); 
         } 

         avgSpeedCalc.add(tmp); 

         int x = 0; 

         for (int y=0;y<avgSpeedCalc.size();y++) 
         { 
          x += avgSpeedCalc.get(y); 
          Log.d("","x : "+x); 
         } 

         x = Math.round(x/avgSpeedCalc.size()); 
         Log.e("","x : "+x); 

         timerSaved = totalBytesReceived; 
         txtSpeed.setText(Integer.toString(x)); 

        } 
       }); 
     } 
    }; 

मैं onCreate() में handler.postDelayed(runnable, 1000); साथ कोशिश की, लेकिन runnable कभी नहीं शुरू होता है। या यहां तक ​​कि अगर मैं runnable.run(); के साथ प्रयास करता हूं, तो यह अभी भी काम नहीं कर रहा है।

कोई विचार मैं कैसे चलने योग्य/हैंडलर शुरू कर सकता हूं और प्रत्येक सेकेंड को ui अपडेट कर सकता हूं?

उत्तर

24

आप एक रननेबल में एक रननेबल क्यों बना रहे हैं? आप अपने यूआई अपडेट करना चाहते हैं

// flag that should be set true if handler should stop 
boolean mStopHandler = false; 

Runnable runnable = new Runnable() { 
    @Override 
    public void run() { 
     // do your stuff - don't create a new runnable here! 
     if (!mStopHandler) { 
      mHandler.postDelayed(this, 1000); 
     } 
    } 
}; 

// start it with: 
mHandler.post(runnable); 
+0

और मैं इसे कैसे उस के बाद बंद कर सकते हैं:

इस प्रयास करें? मेरा मतलब है कि मुझे केवल तभी चलाने की ज़रूरत है जब मुझे इंटरनेट पर डेटा मिल रहा हो और मैं गतिविधि खत्म होने के बाद रननेबल को रोकना चाहता हूं या उपयोगकर्ता रद्द बटन पर क्लिक करना चाहता हूं। –

+0

ने मेरा उत्तर अपडेट किया और ध्वज – WarrenFaith

+2

वास्तव में 'हैंडलर.remove कॉलबैक (रननेबल) पेश किया; 'वही काम कर रहा है। –

1

मुझे लगता है कि यह सबसे अच्छा विकल्प है

new Handler().postDelayed(new Runnable() { 
      @Override 
      public void run() { 
       //Do your work 
      } 
     },500); 
+0

उपरोक्त कोड टॉगल बटन के राज्यों के बीच टॉगल करने के लिए उपयोग किया जा सकता है ..? –

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