我正在学习片段,下面给出的是我的第一个片段程序。一个简单的项目,我有两个屏幕。当我单击第一个屏幕的下一个按钮时,需要显示第二个按钮。
我的目标是 Android 2.1 及更高版本使用兼容包
AppMainFragmentActivity.java
public class AppMainFragmentActivity extends FragmentActivity {
@Override
protected void onCreate(Bundle arg0) {
super.onCreate(arg0);
setContentView(R.layout.app_main_layout);
}
}
app_main_layout.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent" android:layout_height="fill_parent"
android:orientation="vertical" android:id="@+id/fragment_container">
<fragment class="com.research.fragmentstudy.FirstFragment"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:id="@+id/id_first_fragment"/>
</LinearLayout>
FirstFragment.java
public class FirstFragment extends Fragment {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.first_fragment_layout
, container,false);
Button nextButton =(Button) view.findViewById(R.id.button);
nextButton.setOnClickListener(nextListener);
return view;
}
private OnClickListener nextListener = new OnClickListener() {
@Override
public void onClick(View v) {
FragmentManager fm = ((AppMainFragmentActivity)FirstFragment.this
.getActivity()).getSupportFragmentManager();
SecondFragment fragment = new SecondFragment();
FragmentTransaction ft = fm.beginTransaction();
ft.add(R.id.fragment_container, fragment);
ft.commit();
}
};
}
第一个_fragment_layout.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent" android:layout_height="fill_parent"
android:orientation="vertical" android:id="@+id/first_fragment_root">
<TextView android:layout_height="wrap_content"
android:layout_width="fill_parent"
android:text="Fragment 1" android:gravity="center_horizontal" />
<Button android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:layout_width="wrap_content" android:id="@+id/button"
android:text="Next" />
</LinearLayout>
SecondFragment.java
public class SecondFragment extends Fragment {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.second_fragment_layout,
container,false);
return view;
}
}
Second_fragment_layout.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent" android:layout_height="fill_parent"
android:orientation="vertical" android:id="@+id/first_fragment_root">
<TextView android:layout_height="wrap_content"
android:layout_width="fill_parent"
android:text="Fragment 2" android:gravity="center_horizontal" />
</LinearLayout>
好吧,我的第一个屏幕没问题。现在,
根据我对片段的理解,我所期望的
- 当我单击屏幕 1 中的“下一步”按钮时,将创建第二个片段,
它是
onCreate()
and onCreateView()
被叫。
- 显示了 SecondFragment,并且 FirstFragment 被销毁(因为我是
不将其添加到后台)。从此以后不会再有动画了
默认片段事务没有动画。
怎么了
- SecondFragment 已正确创建,其
onCreate()
and onCreateView()
被叫。
- 但第一个片段仍保留在屏幕上,第二个片段永远不会显示。
现在我对fragment的理解可能是错误的。但我相信当我们 commit() 一个片段事务时,第一个片段应该被第二个片段替换(第一个片段要么被隐藏,要么被销毁)。好吧,似乎什么也没发生。这是为什么?我们应该手动销毁/隐藏第一个片段吗?
注意:我知道对于这样一个基本的事情来说这是一个很长的问题。但我把我的整个代码都放在了,因为我不确定我把它搞砸了。