setSupportProgressBarIndeterminateVisibility raise与Android 5.0 SDK(API 21)一起使用时发生java.lang.NullPointerException
我的活动类扩展了android.support.v7.app.ActionBarActivity。我请求窗口功能,并在onCreate()方法调用setSupportProgressBarIndeterminateVisibility()如下:setSupportProgressBarIndeterminateVisibility raise与Android 5.0 SDK(API 21)一起使用时发生java.lang.NullPointerException
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
supportRequestWindowFeature(Window.FEATURE_INDETERMINATE_PROGRESS);
setContentView(R.layout.activity_main);
setSupportProgressBarIndeterminateVisibility(true);
}
我不能把握什么是错我的代码,为什么我收到java.lang.NullPointerException
由setSupportProgressBarIndeterminateVisibility()
提高。
我gradle这个依赖性包含:
compile 'com.android.support:appcompat-v7:21.0.0'
是否有人知道如何使用API 21使用不确定的进度栏在support.v7行动吧?
每this comment克里斯·巴内斯(程序兼容性的作者)程序兼容性V21公布后:
无论哪种方式,进度条的不支持工具栏了。
为什么:
因为工具栏是一个高度集中的小部件。如果你想要一个ProgressBar,你可以自己将它添加到工具栏(它只是一个ViewGroup)。
我希望更多的信息,因为官方文档很快就会在这里更新。
您需要使用工具栏而不是ActionBar并将ProgressBar添加到工具栏中。
这是一个简单的解决方案,将不确定的ProgressBar插入工具栏;原来,这是完全不困难:)只要把你的进度XML元素工具栏里面是这样的:
<android.support.v7.widget.Toolbar
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/toolbar"
android:layout_height="wrap_content"
android:layout_width="match_parent"
android:minHeight="?attr/actionBarSize"
android:background="?attr/colorPrimary">
<ProgressBar
android:id="@+id/progress_spinner"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="end"
android:indeterminate="true"
android:visibility="gone" />
</android.support.v7.widget.Toolbar>
,然后在AppCompatActivity,简单地检索工具栏后取回进度,并设置进度可见或在需要时隐形。
protected void onCreate(Bundle savedInstanceState)
{
setContentView(R.layout.toolbar);
mToolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(mToolbar);
progressBar = (ProgressBar) findViewById(R.id.progress_spinner);
//Make progress bar appear when you need it
progressBar.setVisibility(View.VISIBLE);
//Make progress bar disappear
progressBar.setVisibility(View.INVISIBLE);
}
希望这有助于:)
编辑:更换ActionBarActivity与AppCompatActivity按照最新的Android支持库的准则。
优秀的答案!在一个可能不相关的说明中,我有与上面完全相同的布局代码(也许我从之前的答案中得到了它),但在运行4.4.2的Galaxy S5上忽略了“visibility = gone”。我必须以编程方式通过id找到ProgressBar视图并将其可见性设置为View.GONE。你认为这是某种appcompat问题吗? – swooby 2015-06-04 22:45:28
@swooby我有Galaxy S5运行5.0和可见性=消失的工作就好了(使用最新的支持库appcompat-v7:22.2。)。也许这是一个特定的旧appcompat或4.4.2特定的错误。不过,如果您不需要使用工具栏空间作为其他东西,也可以使用“可见性=不可见”。 – ABVincita 2015-07-10 05:04:12
xml代码应该改进为: 'android:layout_gravity =“end”'。 – drindt 2015-08-01 10:47:09