2013-07-24 61 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