Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/345.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在主活动显示主内容视图之前添加片段 飞溅_Java_Android_User Interface_Android Fragments_Android Activity - Fatal编程技术网

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

Java 在主活动显示主内容视图之前添加片段 飞溅,java,android,user-interface,android-fragments,android-activity,Java,Android,User Interface,Android Fragments,Android Activity,我的主活动UI启动操作需要5-10秒(需要在主UI线程上处理),因此我希望使用启动屏幕,而不是默认的黑色或无响应的主UI 下面提供了一个很好的闪屏解决方案 首先设置的是setContentView(R.layout.splash) 然后执行必要的主UI处理(在UI线程上,但主视图不可见) 准备好后,显示setContentView(R.layout.main) 溅起碎片 我还使用了片段,通常需要在片段实例化之前调用setContentView(R.layout.main),这样片段管理器

我的主活动UI启动操作需要5-10秒(需要在主UI线程上处理),因此我希望使用启动屏幕,而不是默认的黑色或无响应的主UI

下面提供了一个很好的闪屏解决方案

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


溅起碎片 我还使用了片段,通常需要在片段实例化之前调用
setContentView(R.layout.main)
,这样片段管理器就可以在
R.layout.main
中找到视图存根,将片段膨胀成(严格来说,视图存根是另一回事)

  • 但是在创建片段之前,我不能调用
    setContentView(R.layout.main)
    ,因为这样会用(尚未准备好的)主屏幕替换初始屏幕
  • 我担心我想做的事做不到
  • 不幸的是,没有像
    fragmentTransaction.add(viewNotViewId,fragment)这样的重载

几乎回答 以下是关键,即在片段事务之前调用
setContentView

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

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

这里的主要方法是使用id
android.R.id.content
将片段放置在视图中,在通过
setContentView

扩展任何布局之前,该视图始终存在。您可以尝试在片段活动中替换片段,以下是部分编码的想法:
fragmentTransaction.add(android.R.id.content, Fragment.instantiate(MainActivity.this, SplashFragment.class.getName()));
假设您的片段布局如下(main.xml):


出于好奇:您认为在UI线程上真正需要做什么,可能需要10秒钟?这无疑是一个容易发生ANR的问题,对用户体验不利。如果你不将繁重的任务移到背景中,添加启动屏幕不会突然使你的应用程序“响应”。@MH可能接近5秒,因为我看不到ANR,但等待时间太长,用户无法盯着空白;ui是由大量数据绑定视图对象定制而成(一旦实例化,性能就很好)。问题是,我没有一个片段,而是多个片段,它们将在同一主布局中占据不同的占位符(至少在屏幕空间更大的平板电脑上)…我不确定我是否理解正确,但是我现在从一开始就使用了
setContentView(R.layout.main)
,但是在隐藏片段占位符的同时将飞溅(可见)嵌入到主布局中-当片段都准备好了,我隐藏了飞溅布局并将片段布局设置为可见-效果不错@赛尔:没错。您可以替换同一容器中的片段,也可以像答案一样使用不同的容器(在本例中,更容易理解)。
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();
    }

}