更新了SDK以获取所有最新的Android 5.0好处后,我不能使用appcompat中内置的ActionBar进度条。我已经尝试了所有通常的修复方法(将supportRequestWindowFeature()调用移至setContent()之前和oncreate中super调用之前),但都无效。这是我的做法:
public class LoginActivity extends ActionBarActivity {
protected void onCreate(Bundle savedInstanceState) {
supportRequestWindowFeature(Window.FEATURE_INDETERMINATE_PROGRESS);
super.onCreate(savedInstanceState);
setContentView(R.layout.login);
...
loginButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
...
setSupportProgressBarIndeterminateVisibility(true);
}
});
和调用栈信息:
10-18 19:38:21.053: E/AndroidRuntime(11206): java.lang.NullPointerException: Attempt to invoke virtual method 'void android.support.v7.internal.widget.ProgressBarCompat.setVisibility(int)' on a null object reference
10-18 19:38:21.053: E/AndroidRuntime(11206): at android.support.v7.app.ActionBarActivityDelegateBase.updateProgressBars(ActionBarActivityDelegateBase.java:786)
10-18 19:38:21.053: E/AndroidRuntime(11206): at android.support.v7.app.ActionBarActivityDelegateBase.setSupportProgressBarIndeterminateVisibility(ActionBarActivityDelegateBase.java:692)
10-18 19:38:21.053: E/AndroidRuntime(11206): at android.support.v7.app.ActionBarActivity.setSupportProgressBarIndeterminateVisibility(ActionBarActivity.java:327)
10-18 19:38:21.053: E/AndroidRuntime(11206): at com.myapppackage.LoginActivity$2.onClick(LoginActivity.java:82)
这是在运行Android 4.4.4的Nexus 5上。应用程序主题继承自Theme.AppCompat。该应用程序使用Android 5.0构建,目标SDK为21。当我对普通水平进度条使用setSupportProgress时,同样的问题会发生。非常感谢任何帮助。
编辑: 找到了问题。在android.support.v7.internal.widget.ToolbarWidgetWrapper中:
@Override
public void initIndeterminateProgress() {
Log.i(TAG, "Progress display unsupported");
}
也许不是bug而是特性?工具栏似乎成为了新的操作栏。
我在另一台电脑上有V20 appcompat的副本,所以我会回到那个版本。