在主活动显示主内容视图之前添加片段

时间:2012-07-02 19:17:59

标签: java android user-interface android-fragments android-activity

我的主要活动UI启动操作需要5-10秒(需要在主UI线程上处理) - 所以我想使用启动画面而不是默认的黑色或无响应的主UI 。

下面提供了启动画面的一个很好的解决方案

  • 首先设置setContentView(R.layout.splash)
  • 然后执行必要的主UI处理(在UI线程上,但主视图不可见)
  • 当准备就绪时显示setContentView(R.layout.main)

Android Splash Screen before black screen


使用碎片飞溅

我也使用片段,通常需要在片段实例化之前调用setContentView(R.layout.main) - 以便片段管理器可以在R.layout.main中找到视图存根以将片段膨胀到(严格来说,视图存根是一个不同的东西)。

  • 但是在创建片段之前我无法调用setContentView(R.layout.main),因为它会将启​​动画面替换为(尚未准备好的)主屏幕。
  • 我担心的是我想做的事情无法完成?
  • 不幸的是,没有像fragmentTransaction.add(viewNotViewId, fragment);
  • 这样的重载

几乎应答

以下是关键,即在片段事务之前调用setContentViewHow do I add a Fragment to an Activity with a programmatically created content view

2 个答案:

答案 0 :(得分:1)

尝试此代码而不调用任何setContentView

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

此处的主要方法是将片段放入ID为android.R.id.content的视图中,该片段在任何布局通过setContentView

膨胀之前始终存在

答案 1 :(得分: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();
    }

}