我给学习片段和下面是我的第一个片段程序。 一个简单的项目,我有2个屏幕。 当我点击第一个屏幕上的一个按钮,第二个按钮需要显示。
我靶向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();
}
};
}
first_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下一步按钮,创建SecondFragment,它
onCreate()
和onCreateView()
被调用。 - SecondFragment所示,并FirstFragment被销毁(因为我不加它堆栈中)。 不会有任何动画,因为默认片段交易没有动画。
怎么了
- 是越来越创建SecondFragment好了,它的
onCreate()
和onCreateView()
被调用。 - 但FirstFragment保留在屏幕上,而第二个从不说明。
现在我的片段的认识可能是错误的。 但我相信,当我们提交()片段的交易,第一个片段应该由第二个代替(第一个无论是被隐藏或销毁)。 那么似乎没有任何发生。 这是为什么? 如果我们手动销毁/隐藏第一片段?
注:我知道这是对这样一个基本的东西很长的问题。 但是,我把我的全部代码,因为我不知道在那里我搞砸了。