Erste Menüpunkt zu animieren
Ich versuche zu animieren, ein Menü-Element, während die Aktivität geladen, in meine ActionBar (eigentlich ActionBarSherlock). Der code den ich habe funktioniert die erste Zeit die Aktivität angelegt wird, aber jedes mal, wenn die Aktivität erneut aufgerufen wird, bekomme ich eine NullReference exception auf "loadingItem", weil onCreateOptionsMenu
aufgerufen wird, nachdem onCreate
. Ich habe versucht, mit onPrepareOptionsMenu
aber die gleiche Sache.
public class MyActivity extends SherlockActivity {
private MenuItem loadingItem;
@Override
public void onCreate(final Bundle icicle)
{
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);
loadingItem.setActionView(ivRefresh);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getSupportMenuInflater().inflate(R.menu.my_menu, menu);
loadingItem = menu.findItem(R.id.loading);
return super.onCreateOptionsMenu(menu);
}
}
my_menu.xml
<?xml version="1.0" encoding="UTF-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item android:id="@+id/loading"
android:icon="@drawable/loading"
android:showAsAction="always"
/>
</menu>
Update:
Diese letztlich das, was ich versuche zu erreichen. Ich habe eine WebView und ich will zeigen, ein lade-Symbol, bis die WebView geladen wurde:
@Override
public void onCreate(final Bundle icicle)
{
WebView webView = (WebView)findViewById(R.id.webview);
webView.getSettings().setSupportZoom(true);
webView.getSettings().setBuiltInZoomControls(true);
webView.loadUrl("http://www.google.com");
webView.setWebViewClient(new WebBrowserClient());
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);
loadingItem.setActionView(ivRefresh);
webView.setWebChromeClient(new WebChromeClient() {
public void onProgressChanged(WebView view, int progress) {
if (!isFinishing() && progress == 100 && loadingItem != null && loadingItem.getActionView() != null)
{
loadingItem.getActionView().clearAnimation();
loadingItem.setActionView(null);
}
}
});
}
- Wann soll die animation laufen? Immer? Auf bestimmte Ereignisse? Auf erstellen?
- Ich fügte hinzu, mehr code zu meiner OP, die klar sein soll, was ich versuche zu tun.
InformationsquelleAutor Kris B | 2012-04-13
Schreibe einen Kommentar Antworten abbrechen
Du musst angemeldet sein, um einen Kommentar abzugeben.
onCreateOptionsMenu
wird immer aufgerufen werden, nachdemonCreate
. In der TatonCreate
wird immer die erste Methode wird aufgerufen, wenn eine activity erstellt wird.Sollten Sie entweder ordnen Sie die
loadingItem
variable, bevor Sie es verwenden, oder deklarieren Sie als statisch, so dass die Referenz nicht gelöscht, wenn die activity zerstört wird (was immer passieren kann, in dem Fall empfehle ich die erste option).Warum nicht die animation in
onCreateOptionsMenu
?onCreateOptionsMenu
? Sie nicht brauchen, es zu laufen, bis es gefüllt ist, sowieso.onPrepareOptionsMenu
, es wird immer gestartet, wenn der Benutzer klickt auf die Menü-Taste. Könnten Sie das tun, und kombinieren Sie es mit einem class-global-flag im Fall der web-Ansicht wurde bereits geladen? Auf diese Weise müssen Sie nur starten Sie die animation, wenn der Benutzer öffnet den Menüpunkt.