根据webview状态隐藏/显示操作栏图标,不显示一致的行为

时间:2013-12-05 16:21:09

标签: android android-actionbar

我想做什么
我在动作栏中显示/隐藏了两个图标,依赖于webview是否可以返回或继续前进。因此,如果webview可以返回,则只会显示后退操作栏图标。

我现在如何尝试
页面开始后,我会将整数设置为10以进行后退或前进。取决于webview是否可以返回或转发。之后,我致电invalidateOptionsMenu();

现在Oncreateoptions..将隐藏或显示操作栏项,具体取决于后退或前进的整数值10

操作栏和网页视图如何使用此代码
我的应用没有显示一致的行为。大多数情况下,如果单击链接,则会显示后退项目。我回去时会显示转发项目,但是当我访问另一个页面时(因此没有任何内容可以继续)。它仍然在显示。

代码

声明变量:

int stateForward = 1;
int stateBack = 1;

OncreateOptionsmenu:

     @Override
      public boolean onCreateOptionsMenu(Menu menu) { //this method is used for adding menu items to the Activity
      // Inflate the menu; this adds items to the action bar if it is present.
      getMenuInflater().inflate(R.menu.webview_menu, menu);
      if (stateBack == 0) //1 is true, 0 is false
      {
          //hide only option 1
          MenuItem item = menu.findItem(R.id.goBack);
          item.setVisible(false);
      }
      else 
      {
          MenuItem item = menu.findItem(R.id.goBack);
          item.setVisible(true);
      }

      if (stateForward == 0) //1 is true, 0 is false
      {
          //hide only option 2
          MenuItem item = menu.findItem(R.id.goForward);
          item.setVisible(false);
      }
      else 
      {
          MenuItem item = menu.findItem(R.id.goForward);
          item.setVisible(true);
      }
      return true;
      }

OnOptionsItemSelected

    @Override
      public boolean onOptionsItemSelected(MenuItem item) { //this method is used for handling menu items' events
      // Handle item selection
           switch (item.getItemId()) {
              case R.id.goBack:
                if(browser.canGoBack()) {
                   browser.goBack();
                }
              return true;

              case R.id.goForward:
                  if(browser.canGoForward()) {
                     browser.goForward();
                  }
              return true;

              default:
                  return super.onOptionsItemSelected(item);
           }
      }

onPageStarted

   browser.setWebViewClient(new WebViewClient()
    {

        public void onPageStarted(WebView view, String url,  Bitmap favicon) {
            // TODO Auto-generated method stub

            if(browser.canGoBack())
            {
                stateBack = 1; 
                invalidateOptionsMenu();
            }
            else
            {
                stateBack = 0;
                invalidateOptionsMenu();
            }
            if(browser.canGoForward())
            {
                stateForward = 1;
                invalidateOptionsMenu();
            }
            else
            {
                stateForward = 0;
                invalidateOptionsMenu();
            }
            //invalidateOptionsMenu();
         }



    });

它可能是什么
我也觉得可能是按钮比我的WebView落后一步。示例:如果我在webview中分别执行此操作:

   Website:    Items that are visible:

  -Website 1 - items not visible
  -Website 2 - items visible of website one (so still nothing)
  -Website 3 - items visible of website two (so the back button)
  -back to website 2 - items visible of website three (so the back button)
  -Website 4 - items visible of "back to website two" (so back and forward buttons)

但我不能100%确定这是不是真的发生了。

任何想法是什么导致了这个问题,或者如何解决它?提前致谢!

1 个答案:

答案 0 :(得分:0)

onPageStarted被调用时,您检查是否可以返回或继续前进。它将返回一个与onPageStarted“之前”状态匹配的值。因为只有在加载下一页之后,webview的状态才会相同。