2

スプラッシュ

5〜10秒かかるメインアクティビティUIの起動操作があります(メインUIスレッドで処理する必要があります)。そのため、デフォルトの黒または応答しないメインUIではなく、スプラッシュ画面を使用したいと思います。

スプラッシュ画面の適切な解決策を以下に示します

  • これは最初に設定することですsetContentView(R.layout.splash)
  • 次に、必要なメインUI処理を実行します(UIスレッド上で、メインビューが表示されない状態で)
  • そしてそれが準備ができたらショーsetContentView(R.layout.main)

黒い画面の前のAndroidスプラッシュ画面


フラグメントとのスプラッシュ

また、フラグメントを使用しています。これは通常、setContentView(R.layout.main)フラグメントのインスタンス化の前に呼び出す必要があります。これにより、フラグメントマネージャーは、ビュースタブを見つけてR.layout.mainフラグメントを膨らませることができます(厳密に言えば、ビュースタブは別のものです)。

  • ただし、フラグメントを作成する前に呼び出すことはできませんsetContentView(R.layout.main)。これは、スプラッシュ画面が(まだ準備ができていない)メイン画面に置き換わるためです。
  • 私の恐れは、私がやりたいことができないということですか?
  • 残念ながら、のような過負荷はありませんfragmentTransaction.add(viewNotViewId, fragment);

ほぼ回答

キーを除くすべてがここにあります。これはsetContentView、フラグメントトランザクションの前に呼び出さ れます。プログラムで作成されたコンテンツビューを使用して、アクティビティにフラグメントを追加するにはどうすればよいですか。

4

2 に答える 2

1

何も呼び出さずにこのコードを試してくださいsetContentView

fragmentTransaction.add(android.R.id.content, Fragment.instantiate(MainActivity.this, SplashFragment.class.getName()));

ここでの主なアプローチは、idandroid.R.id.contentを使用してフラグメントをビューに配置することです。これは、レイアウトが拡張される前に常に存在します。setContentView

于 2012-07-02T20:12:10.513 に答える
1

FragmentActivityでフラグメントを置き換えてみることができます。これは、部分的にコード化されたアイデアです。フラグメントのレイアウトが次のようになっているとします(main.xml)。

<LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="horizontal">

    <LinearLayout android:id="@+id/waiting" ...>
    </LinearLayout>

    <!-- hidden layout -->
    <LinearLayout>
        <LinearLayout android:id="@+id/layout_list_items" ...>
        </LinearLayout>
        <LinearLayout android:id="@+id/layout_detail" ...>
        </LinearLayout>
    </LinearLayout>

</LinearLayout>

そして、このようなFragmentActivity:

public class FragmentsActivity extends FragmentActivity {

    @Override
    public void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);
        this.setContentView(R.layout.main);

        Fragment fragA = new WaitingTransaction();

        FragmentTransaction fragTrans = this.getSupportFragmentManager().beginTransaction();
        fragTrans.add(R.main.waiting, fragA);
        fragTrans.commit();
    }

    private void afterProcessing(){

                //show hidden layout and make the waiting hidden through visibility, then add the fragment bellow...
        FragmentTransaction fragTrans = this.getSupportFragmentManager().beginTransaction();
        fragTrans.add(R.main.layout_list_items,
                          new FragmentList());
        fragTrans.replace(R.main.layout_detail,
                          new FragmentB());
        fragTrans.commit();
    }

}
于 2012-07-02T20:16:19.783 に答える