2012-02-13 5 views
8

Fragmentsを使用してディスプレイを作成しました。どちらもインターネットから引き出されたデータが入力されています。コード自体は問題なく期待どおりに機能しますが、フラグメント(ListFragmentとして実装されています)の1つは、フラグメント内に不確定な進行インジケータを表示します。私は、インジケータを削除し、代わりにインジケータとして実装された別のProgressDialogを使用したいと思います。ListFragmentを実装するときに「Loading ...」インジケータを非表示にする

いくつかの研究を行う、私はListFragmentクラスで(hereを文書化)機能setListShownNoAnimation()を発見したが、次の試みはうまくいきませんでした:フラグメントのonActivityCreated()

  • 通話中

    • 呼び出すsetListShownNoAnimationを()それは親アクティビティにあるonCreate
    • フラグメントのonCreateView()でこれを呼び出す(IllegalStateExceptionを引き起こした)

    フラグメントの進行状況インジケータを削除するにはどうすればよいですか?

  • +1

    setListShown(true)を使用して試しましたか? – Warpzit

    +0

    @Warpzit:Android APIが示すところから、 'setListShown(true)'はListViewを表示します(初期化されていても設定されていなくてもよい)。さらに、 'setListShownNoAnimation()'が行うように見えるローディングインジケータを無効にしているようには見えません。 – fayerth

    +0

    はちょっと推測でした:)申し訳ありませんが私は助けなかった – Warpzit

    答えて

    24

    これを行うための正しい方法は呼び出すことです。バックグラウンドでデータを取得し終わったら、これを呼び出して、リストを表示する準備が整いました。

    +0

    これは正しい方法のようです。メソッドのfalseは、明らかにユーザーに良い進行状況インジケーターが表示されるはずです。問題は、私のListFragmentでこのメソッドを使用するとIllegalStateExceptionが発生し、カスタムコンテンツビューでは使用できないということです。何がありますか? – topwik

    +0

    あなたは正しいです。それは一般的にそれを呼び出す正しい方法でなければなりません。私のプロジェクトはやや異なっていましたが、別のアプローチが必要でした。私はあなたの答えをマークしていますが、まだ受け入れられた答えです。 :) – fayerth

    +2

    これは、onActivityCreatedで呼び出される必要があります。 – nima

    1

    この回避策は、この問題を解決する最良の方法ではないかもしれないが、それはうまく動作します:

    私が最初に私がlayout.xmlファイルでそれを宣言したとき、フラグメントがまったく表示されませ作りましたなかったもの:

    データがダウンロードされ、処理された後
    <fragment class="com.example.MyListFragment" 
        android:id="@+id/frag_list" 
        android:layout_width="0dp" 
        android:layout_height="match_parent" 
        android:visibility="gone" /> 
    

    はその後、私はその後FragmentTransactionを使用してフラグメントを表示していました:

    FragmentManager fm = getFragmentManager(); 
    Fragment frag = fm.findFragmentById(R.id.frag_list); 
    FragmentTransaction ft = fm.beginTransaction(); 
    ft.show(frag); 
    ft.commit(); 
    

    解像度に良い方法があればこの問題を解決するには、私は提案に開放しています。

    setListShown(true); 
    

    を使用すると、プログレスバーが非表示とリストビューを表示する必要がある場合:

    +0

    可視性がなくなった場合は、それをプログラム的に可視に変更する必要があります。 'setVisivility(View.VISIBLE);' – Ivor

    1
    @Override 
    public void onLoadFinished(Loader<Cursor> loader, Cursor cursor) { 
        adapter.swapCursor(cursor); 
        if(isResumed()) { 
         setListShown(true); 
        } else { 
         setListShownNoAnimation(true); 
        } 
    } 
    

    しかし、あなたはListAdapterを設定setListShown(false)する必要があります。これは正常に動作します。

    関連する問題