首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在main活动之前添加片段显示主内容视图

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

Stack Overflow用户
提问于 2012-07-02 19:17:58
回答 2查看 4.7K关注 0票数 2

飞溅

我有一个主活动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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-07-02 20:16:19

您可以尝试替换FragmentActivity中的片段,以下是部分编码的思想:假设您的片段布局如下(main.xml):

代码语言:javascript
复制
<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是这样的:

代码语言:javascript
复制
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();
    }

}
票数 1
EN

Stack Overflow用户

发布于 2012-07-02 20:12:10

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

代码语言:javascript
复制
fragmentTransaction.add(android.R.id.content, Fragment.instantiate(MainActivity.this, SplashFragment.class.getName()));

这里的主要方法是将片段放置在id android.R.id.content中,在任何布局通过setContentView膨胀之前总是存在的。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11299831

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档