1

アクティビティの読み込み中に、ActionBar(実際にはActionBarSherlock)でメニュー項目をアニメーション化しようとしています。onCreateOptionsMenu私が持っているコードは、アクティビティが最初に作成されたときに機能しますが、アクティビティが再度呼び出されるたびに、の後に呼び出されるため、「loadingItem」でNullReference例外が発生しonCreateます。使ってみonPrepareOptionsMenuましたが、同じものです。

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>

アップデート:

これは最終的に私が達成しようとしていることです。WebViewがあり、WebViewの読み込みが完了するまで読み込みアイコンを表示したい:

    @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);
                }
            }
        }); 
    }
4

1 に答える 1

1

onCreateOptionsMenuは常に の後に呼び出されonCreateます。実際にonCreateは、アクティビティが作成されたときに常に最初に呼び出されるメソッドになります。

使用する前に変数を割り当てるか、loadingItem静的として宣言して、アクティビティが破棄されたときに参照が削除されないようにする必要があります (それでも発生する可能性があります。その場合は最初のオプションをお勧めします)。

でアニメーションを設定してみませんonCreateOptionsMenuか?

于 2012-04-13T00:43:54.683 に答える