我的主要活动UI启动操作需要5-10秒(需要在主UI线程上处理) - 所以我想使用启动画面而不是默认的黑色或无响应的主UI 。
下面提供了启动画面的一个很好的解决方案
setContentView(R.layout.splash)
,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);
以下是关键,即在片段事务之前调用setContentView
:
How do I add a Fragment to an Activity with a programmatically created content view
答案 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();
}
}