Tôi có một MenuItem
trong số ActionBar
là biểu tượng "tải lại". My Activity
có WebView
và tôi muốn biểu tượng bắt đầu hoạt ảnh khi số WebView
bắt đầu tải trang web và dừng khi trang web hoàn tất. Điều này bao gồm khi nhấp vào các liên kết trong trang web được tải. Những gì tôi có cho đến nay, hoạt động lần đầu tiên tôi xuất hiện trang web, nhưng nếu tôi rời khỏi trang web Activity
và tải một trang web khác, biểu tượng "tải lại" có vẻ tăng gấp đôi hoặc tôi sẽ nhận được NullReference
ngoại lệ được ném vào refreshItem.setActionView(ivRefresh);
Bắt đầu hoạt ảnh khi tải trang, dừng trên trang được tải
đây là mã của tôi:
public class Browser extends SherlockFragmentActivity {
private MenuItem refreshItem;
private WebView mWebView;
@Override
public void onCreate(final Bundle icicle)
{
super.onCreate(icicle);
setContentView(R.layout.browser);
mWebView = (WebView)findViewById(R.id.webview);
mWebView.getSettings().setSupportZoom(true);
mWebView.getSettings().setBuiltInZoomControls(true);
mWebView.loadUrl("http://www.google.com");
mWebView.setWebViewClient(new WebBrowserClient());
mWebView.setWebChromeClient(new WebChromeClient() {
public void onProgressChanged(WebView view, int progress) {
//if (!isFinishing() && progress == 100 && refreshItem != null && refreshItem.getActionView() != null)
//{
//refreshItem.getActionView().clearAnimation();
//refreshItem.setActionView(null);
//}
}
});
}
private class WebBrowserClient extends WebViewClient {
@Override
public void onLoadResource(WebView view, String url) {
//StartAnimation();
}
@Override
public void onPageStarted(WebView view, String url, Bitmap favicon) {
StartAnimation();
}
@Override
public void onPageFinished(WebView view, String url) {
if (refreshItem != null && refreshItem.getActionView() != null)
{
refreshItem.getActionView().clearAnimation();
refreshItem.setActionView(null);
}
}
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
view.loadUrl(url);
return true;
}
}
private void StartAnimation() {
final LayoutInflater inflater = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE);
final ImageView ivRefresh = (ImageView)inflater.inflate(R.layout.refresh_view, null);
final Animation rotation = AnimationUtils.loadAnimation(this, R.anim.refresh);
ivRefresh.startAnimation(rotation);
refreshItem.setActionView(ivRefresh);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getSupportMenuInflater().inflate(R.menu.menu, menu);
refreshItem = menu.findItem(R.id.refresh);
return super.onCreateOptionsMenu(menu);
}
}
mã nhận xét ra là những cách khác nhau tôi đã cố gắng để làm cho nó làm việc.
UPDATE:
Sau khi gỡ lỗi hơn này, tôi đặt một breakpoint trong StartAnimation
chức năng và đôi khi nó nhấn lên đến 7 lần liên tiếp và lần khác nó không phải. Điều này không có ý nghĩa, đối với tôi, điều này sẽ hoạt động. Bối rối ...
SOLUTION (loại):
Cập nhật chức năng StartAnimation() đến nay, dường như khắc phục vấn đề này, nhưng dường như nhiều hơn một giải pháp băng keo:
private void StartAnimation() {
if (refreshItem != null && refreshItem.getActionView() == null)
{
final LayoutInflater inflater = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE);
final ImageView ivRefresh = (ImageView)inflater.inflate(R.layout.refresh_view, null);
final Animation rotation = AnimationUtils.loadAnimation(this, R.anim.refresh);
ivRefresh.startAnimation(rotation);
refreshItem.setActionView(ivRefresh);
}
}
Bạn có làm cho nó hoạt động không? làm sao? – Ronnie
Tôi đã thêm giải pháp của mình vào OP. Kiểm tra nếu nó là null hoặc không cố định vấn đề của tôi. –
Bạn đã thử tạo hoạt ảnh làm thành viên của lớp học chưa? – Ronnie