效果演示:
效果说明:
这里有两个碎片:两个碎片中都有Toast,但是我们可以看见,点击多次之后,每个类的Toast都只会有且展示一次,那么我们可以知道这里就可以减少流量的使用,使得app具有生存的价值!!
step 1:
主类的xml布局文件:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="第一个碎片"
android:id="@+id/button"
android:layout_gravity="center_horizontal"/>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="第二个碎片"
android:id="@+id/button2"
android:layout_gravity="center_horizontal"/>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="返回"
android:id="@+id/button3"
android:layout_gravity="center_horizontal"/>
<FrameLayout
android:id="@+id/fragment"
android:layout_width="match_parent"
android:layout_height="match_parent"></FrameLayout>
</LinearLayout>
主类的代码:
initView(); //控件初始化
initFragment(); //第一次默认加载的Fragment处理代码
initView:
private void initView() {
mButton = (Button) findViewById(R.id.button);
mButton2 = (Button) findViewById(R.id.button2);
mButtonback= (Button) findViewById(R.id.button3);
mButton.setOnClickListener(this);
mButton2.setOnClickListener(this);
mButtonback.setOnClickListener(this);
}
initFragment:
private void initFragment() {
mFragmentone=new FragmentOne();
mFragmenttwo=new FragmentTwo();
//创建一个Fragment管理器
mFragmentManager=getSupportFragmentManager();
//开启一个事务 (不可以共享)
FragmentTransaction transaction=mFragmentManager.beginTransaction();
//add (向碎片容器中添加) replace (替换原有的碎片)
//添加,向公共容器中添加一个碎片
transaction.add(R.id.fragment,mFragmentone);
//提交这个事物
transaction.commit();
fragmentNow=mFragmentone;
}
button的监听事件处理函数:
@Override
public void onClick(View v) {
FragmentTransaction transaction=mFragmentManager.beginTransaction();
switch (v.getId()){
case R.id.button:
if (mFragmentone.isAdded()){
//Toast.makeText(MainActivity.this, "one zai l ", Toast.LENGTH_SHORT).show();
transaction.hide(fragmentNow).show(mFragmentone);
}else{
//先隐藏当前页面,再 加载新的页面
transaction.hide(fragmentNow).add(R.id.fragment,mFragmentone);
}
fragmentNow=mFragmentone;
transaction.commit();
break;
case R.id.button2:
if (mFragmenttwo.isAdded()){
transaction.hide(fragmentNow).show(mFragmenttwo);
}else{
//先隐藏当前页面,再 加载新的页面
transaction.hide(fragmentNow).add(R.id.fragment,mFragmenttwo);
}
fragmentNow=mFragmenttwo;
transaction.commit();
break;
case R.id.button3:
mFragmentManager.popBackStack();
break;
}
}
step 2:
FragmentOne代码:
public class FragmentOne extends Fragment {
private Button mButton;
//相当于Activity的onCreate方法,初始化数据和视图
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
//让碎片加载一个布局
View view=inflater.inflate(R.layout.fragment_one,container,false);
Toast.makeText(getContext(), "hahhahahh", Toast.LENGTH_SHORT).show();
return view;
}
}
step 3:
FragmentTwo代码:
public class FragmentTwo extends Fragment {
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View view=inflater.inflate(R.layout.fragment_two,container,false);
Toast.makeText(getContext(), "haaaaaaaaaaaaaa", Toast.LENGTH_SHORT).show();
return view;
}
}