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);
}
}
}
加載,然後回:
裝載,然後再回來:
接受你的答案。你會獲得一個徽章(我認爲)。 :) –
@NikolaDespotoski感謝您的意見!但我並不真正關心徽章。我只是想幫助其他人,如果他們遇到過這個問題。 – TheWizKid95