लोड किए गए पृष्ठ पर रुकें मेरे पास MenuItem
है ActionBar
जो कि "पुनः लोड" आइकन है। मेरे Activity
में WebView
है और मैं आइकन को एनिमेट करना प्रारंभ करना चाहता हूं जब WebView
वेबपृष्ठ लोड करना प्रारंभ करता है और समाप्त होने पर रोकता है। इसमें लोड होने वाली साइट पर लिंक पर क्लिक करते समय शामिल है। क्या मैं अब तक है, पहली बार मैं एक वेबपेज को लाने के काम करता है, लेकिन अगर मैं Activity
छोड़ और एक अन्य वेबपृष्ठ को लोड, "पुनः लोड" आइकन ऊपर दोगुना करने के लिए लगता है, या मैं NullReference
अपवाद refreshItem.setActionView(ivRefresh);
पृष्ठ लोड पर एनीमेशन प्रारंभ करें,
पर फेंक दिया हो जाएगा
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);
}
}
बाहर टिप्पणी की कोड अलग अलग तरीकों से मैं यह काम करने के लिए प्राप्त करने की कोशिश है:
यहाँ मेरी कोड है।
अद्यतन:
इस अधिक डिबगिंग के बाद, मैं एक ब्रेकपाइंट StartAnimation
समारोह में डाल दिया और कभी कभी यह एक पंक्ति और अन्य समय में 7 बार ऐसा नहीं है अप करने के लिए मारा है। यह मेरे लिए कोई समझ नहीं आता है, यह काम करना चाहिए। हैरान ...
समाधान (एक तरह से):
इस के लिए StartAnimation() फ़ंक्शन अद्यतन कर रहा है, इस समस्या को हल करने के लिए लगता है, लेकिन लगता है एक डक्ट टेप समाधान के अधिक:
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);
}
}
क्या आप इसे काम कर रहे थे? कैसे? – Ronnie
मैंने ओपी को अपना समाधान जोड़ा। यह जांचना कि यह शून्य है या मेरी समस्या को ठीक नहीं किया गया है। –
क्या आपने एनीमेशन को अपनी कक्षा के सदस्य के रूप में बनाने का प्रयास किया था? – Ronnie