web-dev-qa-db-ja.com

setSupportProgressBarIndeterminateVisibility Android 5.0 SDK(API 21)で使用するとJava.lang.NullPointerExceptionが発生します

私のアクティビティクラスはAndroid.support.v7.app.ActionBarActivityを拡張します。次のように、ウィンドウ機能を要求し、onCreate()メソッドでsetSupportProgressBarIndeterminateVisibility()を呼び出しています。

_protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    supportRequestWindowFeature(Window.FEATURE_INDETERMINATE_PROGRESS);
    setContentView(R.layout.activity_main);
    setSupportProgressBarIndeterminateVisibility(true);
}
_

コードの何が問題になっているのか、なぜsetSupportProgressBarIndeterminateVisibility()によって_Java.lang.NullPointerException_が発生するのか理解できません。

私のgradle依存関係には次のものが含まれています:

_compile 'com.Android.support:appcompat-v7:21.0.0'
_

API 21でsupport.v7アクションバーの不確定なプログレスバーを使用する方法を知っている人はいますか?

22
Lubos Ilcik

ActionBarの代わりにToolbarを使用し、ProgressBarをツールバーに追加する必要があります。

これは、不確定なProgressBarをツールバーに挿入する簡単な解決策です。まったく難しいことではないことがわかりました:)次のようにProgressBarxml要素をツールバー内に配置するだけです。

<Android.support.v7.widget.Toolbar
    xmlns:Android="http://schemas.Android.com/apk/res/Android"
    Android:id="@+id/toolbar"
    Android:layout_height="wrap_content"
    Android:layout_width="match_parent"
    Android:minHeight="?attr/actionBarSize"
    Android:background="?attr/colorPrimary">

    <ProgressBar
        Android:id="@+id/progress_spinner"
        Android:layout_width="wrap_content"
        Android:layout_height="wrap_content"
        Android:layout_gravity="end"
        Android:indeterminate="true"
        Android:visibility="gone" />

</Android.support.v7.widget.Toolbar>

そして、AppCompatActivityで、ツールバーを取得した後にProgressBarを取得し、必要に応じてProgressBarを表示または非表示に設定します。

protected void onCreate(Bundle savedInstanceState) 
{
    setContentView(R.layout.toolbar);

    mToolbar = (Toolbar) findViewById(R.id.toolbar);
    setSupportActionBar(mToolbar);

    progressBar = (ProgressBar) findViewById(R.id.progress_spinner);

    //Make progress bar appear when you need it
    progressBar.setVisibility(View.VISIBLE);

    //Make progress bar disappear
    progressBar.setVisibility(View.INVISIBLE);
}

お役に立てれば :)

編集:最新のAndroidサポートライブラリガイドラインに従って、ActionBarActivityをAppCompatActivityに置き換えました。

32
ABVincita

あたり このコメント Chris Banes(AppCompatの作者)AppCompat v21の発表投稿:

いずれにせよ、プログレスバーはツールバーでサポートされなくなりました。

理由について:

ツールバーは非常に焦点を絞ったウィジェットだからです。 ProgressBarが必要な場合は、自分でツールバーに追加します(これは単なるViewGroupです)。

公式ドキュメントがまもなくここで更新されるので、より多くの情報を期待しています。

21
ianhanniballake