2

我的主要活动 UI 启动操作需要 5-10 秒(需要在主 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在片段事务之前调用的所有内容: How do I add a Fragment to an Activity with a programmatically created content view

4

2 回答 2

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 回答
1

在不调用任何代码的情况下尝试此代码setContentView

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

这里的主要方法是在视图中放置带有 id 的片段,该 idandroid.R.id.content在任何布局通过膨胀之前始终存在setContentView

于 2012-07-02T20:12:10.513 回答