6

लौटाता है एंड्रॉइड डेवलपर्स संदर्भ में अंतर्निहित व्यू संसाधनों के बीच R.id.progress सूचीबद्ध करता है।findViewById (android.R.id.progress) शून्य

फिर भी

, जब मैं जारी (मेरी गतिविधि वर्ग में) बयान:

View pv = getWindow().findViewById(android.R.id.progress); 

यह अशक्त देता है।

यह NULL भेजता है तब भी जब मैं ProgressBar वर्ग के साथ संयोजन के रूप में इसका इस्तेमाल करते हैं:

ProgressBar pv = (ProgressBar) getWindow().findViewById(android.R.id.progress); 

और यह अशक्त भी without the getWindow() रिटर्न:

ProgressBar pv = (ProgressBar) findViewById(android.R.id.progress); 

किसी भी विचार क्यों?

यकीन है कि मैं मतिभ्रमित नहीं कर रहा हूँ बनाने के लिए, मैं @ Geobits की सलाह का पालन किया और नीचे @ArunGeorge द्वारा सिफारिश की खरोंच से एक नई परियोजना, the blog post में सूचीबद्ध सटीक कोड युक्त बनाया:

package com.droidworks; 

import android.app.Activity; 
import android.os.Bundle; 
import android.os.Handler; 
import android.widget.ProgressBar; 

public class ProgressBarExampleActivity extends Activity { 
    private ProgressBar mProgress; 
    private MyThread mBgThread; 
    private final Handler mHandler = new Handler(); 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 

    mProgress = (ProgressBar) findViewById(android.R.id.progress); 

    mBgThread = (MyThread) getLastNonConfigurationInstance(); 

    if (mBgThread == null) { 
     mBgThread = new MyThread(); 
     mBgThread.start(); 
    } 

    mHandler.post(mThreadWatcher); 
    } 

    @Override 
    public Object onRetainNonConfigurationInstance() { 
    return mBgThread; 
    } 

    @Override 
    protected void onPause() { 
    mHandler.removeCallbacks(mThreadWatcher); 
    super.onPause(); 
    } 

    private Runnable mThreadWatcher = new Runnable() { 
     public void run() { 
     int progress = mBgThread.getProgress(); 
     mProgress.setProgress(progress); 

     if (progress != 100) 
      mHandler.postDelayed(this, 50); 
     } 
    }; 

    static class MyThread extends Thread { 

    private int _progress = 0; 

    public void run() { 
     for (; _progress < 100; _progress++) { 
     try { 
      Thread.sleep(100); 
     } 
     catch (InterruptedException ignored) { 
     } 
     } 
    } 

    private int getProgress() { 
     return _progress; 
    } 
    } 

} 

ज़रूर पर्याप्त इस कोड फेंकता एक NullPointerException:

at com.droidworks.ProgressBarExampleActivity$1.run(ProgressBarExampleActivity.java:44) 
at android.os.Handler.handleCallback(Handler.java:587) 
at android.os.Handler.dispatchMessage(Handler.java:92) 
at android.os.Looper.loop(Looper.java:123) 
at android.app.ActivityThread.main(ActivityThread.java:4627) 
at java.lang.reflect.Method.invokeNative(Native Method) 
at java.lang.reflect.Method.invoke(Method.java:521) 
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868) 
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626) 
at dalvik.system.NativeStart.main(Native Method) 
+0

एंड्रॉइड का कौन सा संस्करण? –

+0

क्योंकि आपके पास स्क्रीन पर दिखाई देने वाली आईडी द्वारा कोई दृश्य नहीं है। – FoamyGuy

+0

@ user1260028 Froyo (2.2) @Tim आप "दिखाना नहीं" से क्या मतलब है? क्या इसे 'findViewById()' कॉल के समय दृश्यमान होना चाहिए? – ateiob

उत्तर

1

R.id.progress में निर्मित टैग ProgressBar वर्ग के लिए बनाया गया है। यदि आपके पास आपके XML में ProgressBar ऑब्जेक्ट या ProgressBar नहीं है, तो यह शून्य हो जाएगा।

+0

@ ack57 मैं अपनी आंखों के साथ 'प्रोग्रेसबार' देख सकता हूं ... हालांकि, यह सच है कि मेरे एक्सएमएल में कोई भी नहीं है। यह सिस्टम का अंतर्निहित प्रोग्रेसबार है। क्या वह उन 'android.R.id' संसाधनों का पूरा उद्देश्य नहीं है? वे * मेरे एक्सएमएल में होने की जरूरत नहीं है। – ateiob

+1

नहीं, आपके पास प्रोग्रेसबार के लिए प्रोग्रामेटिकल कनेक्शन होना चाहिए। बस 'R.id.progress' दर्ज करने से आपके लिए सबसे सुविधाजनक प्रोग्रेसबार नहीं मिलेगा। –

+0

"प्रोग्रेसबार * के लिए प्रोग्रामेटिकल कनेक्शन" क्या है? – ateiob

-1

android.R.id.progressProgressBar के साथ संयोजन में उपयोग किया जाता है। इस लिंक

की जांच: http://foo.jasonhudgins.com/2010/03/simple-progressbar-tutorial.html

अपने उपयोग इस प्रकार गलत है।

+0

"आपका उपयोग इस प्रकार गलत है" का क्या मतलब है? जब मैं 'प्रोग्रेसबार' वर्ग का उपयोग करता हूं तब भी यह शून्य हो जाता है: 'प्रोग्रेसबार पीवी = (प्रोग्रेसबार) getWindow()। FindViewById (android.R.id.progress); '। कृपया समझाएँ। – ateiob

+0

आप 'getViewById (android.R.id.progress)' का उपयोग क्यों नहीं करते हैं, इसे 'getWindow()' विधि के साथ संलग्न किए बिना? –

+0

मैंने भी ऐसा किया! वही शून्य ... – ateiob

0

संपादित

क्षमा करें, मैं इसे गलत गिना गया होगा। पेस्टिंग के लिए मुझे यही मिलता है। किसी भी तरह से, क्या कोई कारण नहीं है कि आप केवल ProgressBar के constructors का उपयोग न करें? यहाँ लाइन नवीनतम परियोजना से मैं में एक बार इस्तेमाल किया है:

mProgress = new ProgressBar(this, null, android.R.attr.progressBarStyleHorizontal); 
+1

पोस्ट किया गया कोड उस अपवाद का उत्पादन करने वाली अपनी 'ProgressBarExampleActivity.java' कक्षा से सटीक प्रतिलिपि और पेस्ट है। नल सूचक अपवाद लाइन 44 पर उत्पन्न होता है: 'mProgress.set प्रगति (प्रगति); '। शून्य प्रगति के लिए है। वही समस्या ... विचार? धन्यवाद। – ateiob

+1

यह सत्यापित करने के लिए, मैं 'if (mProgress == null)' के लिए 'findViewById()' के बाद सही() में चेक करें और लॉगकैट में एक त्रुटि संदेश जारी करता हूं। यह शून्य है। मैं * सही जगह पर देख रहा हूं। इस कोड verbatim की प्रतिलिपि बनाने के लिए स्वतंत्र महसूस करें और इसे अपने सिस्टम पर आज़माएं। ग्रहण में, उसी सटीक कोड वाले स्क्रैच से एक नई परियोजना बनाने में केवल 2 मिनट लगते हैं। – ateiob

+1

आह, मेरा बुरा, अद्यतन उत्तर। – Geobits

-1

ग्रहण आधार पर एक परियोजना स्वच्छ प्रदर्शन> 'प्रोजेक्ट' पर क्लिक करके 'स्वच्छ ...', अपनी परियोजना के बगल में चेकबॉक्स पर क्लिक करें, और ओके पर क्लिक करें'। और फिर अपनी परियोजना का निर्माण करने का प्रयास करें।

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