6

Списки разработчиков Android Developers R.id.progress среди встроенных ресурсов Просмотр ресурсов.findViewById (android.R.id.progress) возвращает null

Тем не менее, когда я выполняю (в моем классе деятельности) заявление:

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

возвращает нуль.

возвращает нуль, даже когда я использую его в сочетании с ProgressBar класса:

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

И возвращает нуль даже without the getWindow():

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

Любая идея, почему?

Для того, чтобы убедиться, что я не галлюцинация, я последовал совет @ Geobits и создал новый проект с нуля, содержащий код точного перечисленного в the blog post по @ArunGeorge рекомендуемого ниже:

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; 
    } 
    } 

} 

достаточно Sure этот код бросает 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

Какая версия Android? –

+0

, потому что у вас нет представления по этому идентификатору, отображаемому на экране. – FoamyGuy

+0

@ user1260028 Froyo (2.2) @Tim Что вы подразумеваете под словом "not show"? Должно ли это быть видимым во время вызова 'findViewById()? – ateiob

ответ

1

R.id.progress встроенный тег предназначен для ProgressBar класса. Если у вас нет объекта ProgressBar или ProgressBar в вашем XML, он вернет значение null.

+0

@ ack57 Я вижу «ProgressBar» своими глазами ... Это правда, что в моем XML нет никакого. Это встроенная система ProgressBar. Разве это не все цели этих ресурсов android.R.id? Они * не * должны быть в моем XML. – ateiob

+1

Нет, вы должны иметь программную связь с ProgressBar. Простое внесение 'R.id.progress' не принесет вам самый удобный ProgressBar. –

+0

Что такое «* программная связь с ProgressBar *»? – ateiob

-1

android.R.id.progress используется в сочетании с ProgressBar.

Проверить эту ссылку: http://foo.jasonhudgins.com/2010/03/simple-progressbar-tutorial.html

ваше использование, таким образом, не так.

+0

Что вы подразумеваете под «ваше использование, таким образом, неправильно»? Он возвращает null, даже когда я использую класс 'ProgressBar':' ProgressBar pv = (ProgressBar) getWindow(). FindViewById (android.R.id.progress); '. Пожалуйста, объясни. – ateiob

+0

Почему бы вам просто не использовать 'findViewById (android.R.id.progress)' без добавления его с помощью метода 'getWindow()'? –

+0

Я тоже это сделал! Тот же нуль ... – ateiob

0

EDITED

К сожалению, я должен насчитали это неправильно. это то, что я получаю за не вставку. В любом случае, есть ли причина, по которой вы не просто используете один из ProgressBarconstructors? Вот строки из последнего проекта я использовал бар в:

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

Выведенный код является точной копией и вставкой из моего собственного класса ProgressBarExampleActivity.java, создающего это исключение. Исключение нулевого указателя генерируется в строке 44: 'mProgress.setProgress (progress);'. Нуль для mProgress. Такая же проблема ... Идеи? Благодарю. – ateiob

+1

Чтобы убедиться, что я проверяю 'if (mProgress == null)' сразу после 'findViewById()' в onCreate() и выдает сообщение об ошибке в LogCat. Это нулевое значение. Я * я * смотрю в нужное место. Не стесняйтесь скопировать этот код дословно и попробовать его в своей системе. В eclipse требуется всего 2 минуты для создания нового проекта с нуля, содержащего точный точный код. – ateiob

+1

А, мой плохой, обновленный ответ. – Geobits

-1

С Eclipse, выполнить проект чистый, нажав на «Project»> «Clean ...», нажмите на флажок рядом с вашим проектом, и нажмите «ОК». И попробуйте снова создать свой проект.

Смежные вопросы