我的操作栏中有一个项目,单击时会显示进度条。但是,当用户单击进度条时,我希望进度条停止,并再次显示正常的“刷新”按钮。目前,进度条变得无法点击。这是我的代码:
case R.id.id_Refresh:;
menuItem = item;
if(btnRefreshPressed == true){
menuItem.setActionView(R.layout.progressbar);
menuItem.expandActionView();
btnRefreshPressed = false;
mUpdateMap.run();
return true;
}else if(btnRefreshPressed == false){
menuItem.collapseActionView();
menuItem.setActionView(null);
mHandler.removeCallbacks(mUpdateMap);
btnRefreshPressed = true;
return true;
}
progressbar.xml:
<?xml version="1.0" encoding="utf-8"?>
<ProgressBar xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/progressbar2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:clickable="true" >
</ProgressBar>
答案 0 :(得分:3)
当您使用自己的actionView时,需要处理点击视图本身:
menuItem.getActionView().setOnClickListener(...);
此外,您可以使用viewSwitcher作为actionView,而不是使用2种模式,而是使用showNext作为actionView,只需使用{{3}}()进行切换即可。
编辑:支持单击操作栏项目的最简单方法,无论它们是否包含actionView,您都可以使用此代码:
public static void setOnMenuItemSelected(final MenuItem menuItem, final Runnable runnable) {
final View view = menuItem.getActionView();
if (view != null)
view.setOnClickListener(new OnClickListener() {
@Override
public void onClick(final View v) {
runnable.run();
}
});
else
menuItem.setOnMenuItemClickListener(new OnMenuItemClickListener() {
@Override
public boolean onMenuItemClick(final MenuItem item) {
runnable.run();
return true;
}
});
}
答案 1 :(得分:1)
您没有传递ID:
findViewById(com.example.androidbasic12.R.layout.progressbar);
它应该是R.id.YourID
而不是R.layout.progressbar
这就是你得到NullPointerException