Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/42.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 操作栏中的进度条不可单击_Android_Android Actionbar - Fatal编程技术网

Android 操作栏中的进度条不可单击

Android 操作栏中的进度条不可单击,android,android-actionbar,Android,Android Actionbar,我的actionbar中有一个项目,单击时会显示进度条。但是,当用户单击进度条时,我希望进度条停止,并再次显示正常的“刷新”按钮。当前progressbar变得不可访问。这是我的密码: case R.id.id_Refresh:; menuItem = item; if(btnRefreshPressed == true){ menuItem.setActionView(R.layout.progressbar);

我的actionbar中有一个项目,单击时会显示进度条。但是,当用户单击进度条时,我希望进度条停止,并再次显示正常的“刷新”按钮。当前progressbar变得不可访问。这是我的密码:

    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>

您没有传递ID:

findViewById(com.example.androidbasic12.R.layout.progressbar);
它应该是
R.id.YourID
而不是
R.layout.progressbar

这就是为什么您得到一个NullPointerException,而您没有传递ID:

findViewById(com.example.androidbasic12.R.layout.progressbar);
它应该是
R.id.YourID
而不是
R.layout.progressbar

这就是为什么在使用自己的actionView时会出现NullPointerException的原因,您需要处理对视图本身的单击:

menuItem.getActionView().setOnClickListener(...);
另外,您可以使用actionView作为actionView,并在需要时使用()进行切换,而不是有两种模式,一种是带actionView,另一种是不带actionView


编辑:对于支持单击操作栏项目的最简单方法,无论它们是否包含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;
            }
        });
}

当您使用自己的actionView时,您需要处理对视图本身的单击:

menuItem.getActionView().setOnClickListener(...);
另外,您可以使用actionView作为actionView,并在需要时使用()进行切换,而不是有两种模式,一种是带actionView,另一种是不带actionView


编辑:对于支持单击操作栏项目的最简单方法,无论它们是否包含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;
            }
        });
}


您是否尝试使用ProgressBar类的
.setClickable(true)
方法?我尝试了
ProgressBar proBar=(ProgressBar)findViewById(com.example.androidbasic12.R.layout.ProgressBar);概率可设置可点击(真);menuItem.setActionView(proBar);menuItem.expandActionView()
但是这给了nullpointerexception。需要更多的代码来回答这个问题,然后尝试/捕获NPE并检查它在哪里happen@cyberwalker我在问题中添加了progressbar的xml,您还需要什么吗?Sw4Tish,我正在尝试找出nullpointerexception发生的位置。您是否尝试使用ProgressBar类的
.setClickable(true)
方法?我尝试了
ProgressBar proBar=(ProgressBar)findViewById(com.example.androidbasic12.R.layout.ProgressBar);概率可设置可点击(真);menuItem.setActionView(proBar);menuItem.expandActionView()
但是这给了nullpointerexception。需要更多的代码来回答这个问题,然后尝试/捕获NPE并检查它在哪里happen@cyberwalker我在问题中添加了progressbar的xml,您还需要什么吗?Sw4Tish,我想知道nullpointerexception发生在哪里。谢谢你的回答。我将其更改为:
ProgressBar proBar=(ProgressBar)findViewById(id.progressbar2);概率可设置可点击(真)并且它仍然给出了nullpointerexception。但是,我在xml中设置了
android:clickable=“true”
,因此不需要这样做?nullpointerexception发生在
proBar.setClickable(true)处。谢谢你的回答。我将其更改为:
ProgressBar proBar=(ProgressBar)findViewById(id.progressbar2);概率可设置可点击(真)并且它仍然给出了nullpointerexception。但是,我在xml中设置了
android:clickable=“true”
,因此不需要这样做?nullpointerexception发生在
proBar.setClickable(true)处。你好,谢谢!这很有魅力。我还将研究viewSwitcher。干杯是的,我不知道为什么会出现这种行为,所以如果你发现了为什么会出现这种行为,请分享你的发现。我添加了一个替代选项,这样就不需要检查菜单项是否有操作视图。您好,谢谢!这很有魅力。我还将研究viewSwitcher。干杯是的,但我不确定为什么会出现这种行为,因此如果您发现了这种行为的原因,请分享您的发现。我添加了一个替代选项,可以消除检查菜单项是否具有操作视图的需要。