2013-07-24 66 views
0

所以我试图在webview正在加载时以及每当活动开始时刷新menuitem。无论什么时候没有必要,我也试图隐藏转发menuitem。下面的代码完美地工作,除非每次webview加载,并且你回击或者当你尝试一次执行多个任务(通过大量历史点击回来)时。无论何时发生这种情况,刷新menuitem往往会重复,动画并重叠。这也发生在转发menuitem。它倾向于被动画刷新图标重叠。有什么办法可以防止这种情况发生?下面的代码是我的代码,除了不相关的东西被修剪之外。有人能帮我克服这个错误吗?保持菜单项动画不重叠?

public class TideWeb extends Activity { 
    private static WebView webView; 
    String name = null; 
    MenuItem refresh, forward; 
    ActionBar ab; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     Intent launchingIntent = getIntent(); 
     name = launchingIntent.getType().toString(); 
     setContentView(R.layout.webview); 
     webView = (WebView) findViewById(R.id.WebView); 
     webView.setWebViewClient(new WebViewClient() { 
      public boolean shouldOverrideUrlLoading(WebView webview, String url) { 
        if (refresh != null && refresh.getActionView() == null) { 
         StartAnimation(); 
        } 
        ab.setSubtitle("Loading..."); 
        webView.loadUrl(url); 

       return true; 

      } 
     }); 
     webView.setWebChromeClient(new WebChromeClient() { 
      public void onProgressChanged(WebView view, int progress) { 
       setSupportProgress(progress * 100); 
       if (progress == 100) { 
        view.clearCache(true); 
        StopAnimation(); 
        ab.setSubtitle(name); 
       } 
      } 
     }); 
     String url = launchingIntent.getData().toString(); 

     webView.loadUrl(url); 
    } 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     getSupportMenuInflater().inflate(R.menu.tideweb, menu); 
     forward = menu.findItem(R.id.forward_menu); 
     if (webView.isFocused() && webView.canGoForward()) { 
      forward.setVisible(true); 
     } else { 
      forward.setVisible(false); 
     } 
     ab.setSubtitle("Loading..."); 
     refresh = menu.findItem(R.id.refresh_menu); 
     if (refresh != null && refresh.getActionView() == null) { 
      StartAnimation(); 
     } 
     return true; 
    } 

    @Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
     switch (item.getItemId()) { 
     case R.id.forward_menu: 
      webView.goForward(); 
      invalidateOptionsMenu(); 
      break; 
     case R.id.refresh_menu: 
      webView.reload(); 
      invalidateOptionsMenu(); 
      break; 
     case android.R.id.home: 
      Intent intent = new Intent(this, Main.class); 
      intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
      startActivity(intent); 
      return true; 
     } 
     return true; 
    } 

    public void onBackPressed() { 
     if (webView.isFocused() && webView.canGoBack()) { 
      webView.goBack(); 
      invalidateOptionsMenu(); 
     } else { 
      super.onBackPressed(); 
      finish(); 
     } 
    } 

    private void StartAnimation() { 
    if (refresh != null && refresh.getActionView() == null) { 
      final LayoutInflater inflater = (LayoutInflater) getApplication() 
       .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
      final RelativeLayout ivRefresh = (RelativeLayout) inflater.inflate(
       R.layout.refresh_view, null); 

      final Animation rotation = AnimationUtils.loadAnimation(
       getApplication(), R.anim.rotate); 
      ivRefresh.startAnimation(rotation); 
      refresh.setActionView(ivRefresh); 
     } 
    } 

    private void StopAnimation() { 
     if (refresh != null && refresh.getActionView() != null) { 
      refresh.getActionView().clearAnimation(); 
      refresh.setActionView(null); 
     } 
    } 
} 

加载,然后回: loading, then back

装载,然后再回来: loading, then back and back

回答

0

我真的没有找到这个修复程序,但不是使用图像和动画它,我将actionview设置为进度条。重叠不会再发生,所以我想现在它已经修复了。

+0

接受你的答案。你会获得一个徽章(我认为)。 :) –

+1

@NikolaDespotoski感谢您的意见!但我并不真正关心徽章。我只是想帮助其他人,如果他们遇到过这个问题。 – TheWizKid95