gpt4 book ai didi

android - findViewById(android.R.id.progress) 返回 null

转载 作者:塔克拉玛干 更新时间:2023-11-02 21:46:55 24 4
gpt4 key购买 nike

Android 开发者引用列表 R.id.progress在可用的内置 View 资源中。

然而,当我(在我的 Activity 课上)发表声明时:

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

它返回空值。

即使我将它与 ProgressBar 类一起使用,它也会返回 null:

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

它甚至返回 null 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;
}
}

}

果然,这段代码抛出了一个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)

最佳答案

R.id.progress 内置标签是为ProgressBar 类设计的。如果您的 XML 中没有 ProgressBar 对象或 ProgressBar,则它将返回 null。

关于android - findViewById(android.R.id.progress) 返回 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11299773/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com