2009-05-23 14 views
24

से UI परिवर्तन करने के लिए runOnUiThread का उपयोग करके मैं एक कस्टम शीर्षक दृश्य का उपयोग कर रहा हूं और थ्रेड काम करते समय शीर्षक दृश्य में प्रगति पट्टी को दिखाना/छिपाना चाहता हूं।एंड्रॉइड - थ्रेड

यह मेरी शीर्षक दृश्य के XML

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="horizontal" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
> 
    <Button 
     android:id="@+id/image_left_btn" 
     android:layout_width="75dip" 
     android:layout_height="wrap_content" 
     android:text="Back" 
    /> 
    <TextView 
     android:id="@+id/image_title_text" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_weight="1" 
     android:textSize="20dip" 
     android:textStyle="bold" 
     android:textColor="#fff" 
     android:layout_gravity="center" 
     android:gravity="center" 
     android:paddingLeft="8dip" 
     android:paddingRight="8dip" 
    /> 
    <ProgressBar 
     android:id="@+android:id/progress_small_title" 
     style="?android:attr/progressBarStyleSmall" 
     android:layout_width="75dip" 
     android:layout_height="wrap_content" 
     android:paddingRight="8dip"/> 
</LinearLayout> 

मेरे गतिविधि में है, कस्टम शीर्षक पट्टी के रूप में इस सेट करने के बाद, मैं इस

titleProgress = (ProgressBar)findViewById(R.id.progress_small_title); 
titleProgress.setVisibility(View.INVISIBLE); 

जहां titleProgress ProgressBar वस्तु है।

यह वही है मैं अपने धागा

runOnUiThread(new Runnable() { 
    public void run() { 
     titleProgress.setVisibility(View.VISIBLE); 
    } 
}); 
//long operation here 
runOnUiThread(new Runnable() { 
    public void run() { 
     titleProgress.setVisibility(View.INVISIBLE); 
    } 
}); 

में क्या लेकिन प्रगति बार के लिए कोई बदलाव नहीं आया है। यह कभी प्रदर्शित नहीं होता है। क्या कोई मुझे बता सकता है कि कोड के साथ क्या गलत है?

क्या कस्टम शीर्षक में शीर्षक प्रगति पट्टी प्रदर्शित करना संभव है?

धन्यवाद।

उत्तर

16

कुछ बातें की कोशिश करने देखें:

1) (यह शायद यह नहीं है) सुनिश्चित करें कि "titleProgress" अस्थिर है।

2) रेड्रो ट्रिगर करने के लिए वहां कुछ postInvalidate() या titleProgress.postInvalidate() फेंकने का प्रयास करें।

3) क्या आपने एक विशाल हरे रोबोट के समान परिवर्तन पर x486 मशीन को संक्रमित किया है? (बस मजाक कर रहे हैं)

मुझे बताएं कि क्या पहले दो (और यदि आप वास्तव में हताश हैं, तीसरा) आपको कहीं भी ले जाते हैं।

+3

पहले से ही पहले दो की कोशिश की लेकिन मदद नहीं की! और मैं हताश हूं तो मुझे लगता है कि 3 के लिए कॉल? ;) – lostInTransit

+0

3) विकल्प सभी समस्याओं के लिए सबसे अच्छा समाधान है ... एलओएल – Rodrigo

0

horizonal को ProgressBar की शैली को बदलने का प्रयास करें:

style="?android:attr/progressBarStyleHorizontal" 

मूल

style="?android:attr/progressBarStyleSmall" 

एक परिपत्र "प्रगति" जो पूरी तरह से शीर्षक पट्टी में नहीं देखा जा सकता देता है।

+0

मैंने प्रगति के साथ भी कोशिश की BarStyleSmallTitle जिसे डिफ़ॉल्ट शीर्षक पट्टी में फिट होना चाहिए। यहां तक ​​कि यह नहीं दिखाता है। – lostInTransit

5

क्या आप इस मामले में इस्तेमाल करना चाहिए AsyncTask, http://developer.android.com/reference/android/os/AsyncTask.html

आप एंड्रॉयड के एक पूर्व 1.5 संस्करण को लक्षित नहीं कर रहे हैं देखते हैं, आप UserTask नामक एक अलग वर्ग का उपयोग करना होगा है। http://android-developers.blogspot.com/2009/05/painless-threading.html

1

क्या आपका लेआउट सही है? क्या आपने इसे वर्टिकल लेआउट के साथ पहले काम करने का प्रयास किया था? यह देखने के लिए कि क्या आप अपनी गतिविधि शुरू करते समय प्रगति पट्टी दिखाई दे रही है?हैंडलर साथ

4

उपयोग संचार,

  1. निष्पादित अपने धागा
  2. run() में
  3. : आप जो Progressbar (बेशक क्षैतिज) अद्यतन करेगा हैंडलर के लिए एक संदेश भेजना चाहिए: handler.sendMessage(handler.obtainMessage());
  4. में

    अपने गतिविधि, आपको handleMessage(Message msg) विधि को ओवरराइड करना चाहिए: इस

    handler = new Handler(){ 
        @override 
        public void handleMessage(Message msg) 
        { 
        //here you write the code which will update your progressBar 
        } 
    }; 
    
+0

यह केवल तभी काम करेगा जब आपका धागा आपकी गतिविधि कक्षा में लपेटा गया हो। – Miky

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