将我的SDK更新到所有最新的Android 5.0好东西后,我无法使用appcompat中ActionBar内置的进度条.我已经完成了所有常用的修复(在setContent()之前和oncreate中的超级调用之前调用supportRequestWindowFeature(),但没有任何效果.这是我正在做的事情:
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);
}
});
Run Code Online (Sandbox Code Playgroud)
和堆栈跟踪:
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)
Run Code Online (Sandbox Code Playgroud)
这是在运行Android 4.4.4的Nexus 5上.应用主题继承自Theme.AppCompat.该应用程序使用Android 5.0构建,targetSDK为21.当我将setSupportProgress用于普通水平进度条时,同样的事情发生.任何帮助非常感谢.
编辑:发现问题.在android.support.v7.internal.widget.ToolbarWidgetWrapper中:
@Override
public void initIndeterminateProgress() {
Log.i(TAG, "Progress display unsupported");
}
Run Code Online (Sandbox Code Playgroud)
也许不是一个bug而是一个功能?工具栏似乎是新的ActionBars.
我在另一台计算机上有一个V20 appcompat的副本,所以我要回到那个.
ov3*_*1ll 12
可能的解决方法是手动将ProgressBar添加为自定义视图并覆盖setSupportProgressBarIndeterminateVisibility
在onCreate:
ProgressBar progressBar = new ProgressBar(this);
progressBar.setVisibility(View.GONE);
progressBar.setIndeterminate(true);
getSupportActionBar().setDisplayShowCustomEnabled(true);
getSupportActionBar().setCustomView(progressBar);
Run Code Online (Sandbox Code Playgroud)
在您的活动中:
@Override
public void setSupportProgressBarIndeterminateVisibility(boolean visible) {
getSupportActionBar().getCustomView().setVisibility(visible ? View.VISIBLE : View.GONE);
}
Run Code Online (Sandbox Code Playgroud)
当然,切换到工具栏并添加ProgressBar应该会更加面向未来.
编辑:以下内容不起作用,因为它ProgressBarCompat是一个隐藏类,无法添加到您的 XML 布局中。感觉就像 appcompat 库中的一个错误。
它正在寻找进度条ActionBarActivityDelegateBase.java:
private ProgressBarCompat getCircularProgressBar() {
ProgressBarCompat pb = (ProgressBarCompat) mActivity.findViewById(R.id.progress_circular);
if (pb != null) {
pb.setVisibility(View.INVISIBLE);
}
return pb;
}
Run Code Online (Sandbox Code Playgroud)
updateProgressBars()并在同一个类的方法中使用它。看起来开发人员应该ProgressBarCompat向您的活动添加 a 。
| 归档时间: |
|
| 查看次数: |
7510 次 |
| 最近记录: |