Demo重点:Fragment切换前后,保留FragmentTwo中TextView的内容。
项目打包:http://download.csdn.net/detail/iwanghang/9611671
manifests.xml:
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.iwanghang.fragmenttransactiondemo"> <application android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:supportsRtl="true" android:theme="@style/AppTheme"> <activity android:name=".MainActivity" android:screenOrientation="portrait"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application> <!-- MainActivity 强制竖屏显示 --> <!-- android:screenOrientation="portrait" --> </manifest>MainActivity.java:
package com.iwanghang.fragmenttransactiondemo; import android.os.Bundle; import android.support.v4.app.Fragment; import android.support.v4.app.FragmentActivity; import android.support.v4.app.FragmentTransaction; import android.view.View; import android.view.View.OnClickListener; import android.widget.LinearLayout; public class MainActivity extends FragmentActivity implements OnClickListener { private LinearLayout oneLinearLayout; private LinearLayout twoLinearLayout; private LinearLayout threeLinearLayout; private Fragment fragmentAll; private OneFragment oneFragment; private TwoFragment twoFragment; private ThreeFragment threeFragment; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); initView(); showOneFragment(); } private void initView() { fragmentAll = getSupportFragmentManager().findFragmentById( R.id.emptyFragment); oneLinearLayout = (LinearLayout)this.findViewById(R.id.oneLinearLayout); twoLinearLayout = (LinearLayout)this.findViewById(R.id.twoLinearLayout); threeLinearLayout = (LinearLayout)this.findViewById(R.id.threeLinearLayout); oneLinearLayout.setOnClickListener(this); twoLinearLayout.setOnClickListener(this); threeLinearLayout.setOnClickListener(this); } @Override public void onClick(View arg0) { switch (arg0.getId()) { case R.id.oneLinearLayout: showOneFragment(); break; case R.id.twoLinearLayout: showTwoFragment(); break; case R.id.threeLinearLayout: showThreeFragment(); break; default: break; } } public void showOneFragment() { if (!(fragmentAll instanceof OneFragment)) { FragmentTransaction fragmentTransaction = getSupportFragmentManager() .beginTransaction(); //如果所有的fragment都不为空的话,把所有的fragment都进行隐藏。最开始进入应用程序,fragment为空时,此方法不执行 hideFragment(fragmentTransaction); //如果这个fragment为空的话,就创建一个fragment,并且把它加到ft中去.如果不为空,就把它直接给显示出来 if(oneFragment == null){ oneFragment = new OneFragment(); fragmentTransaction.add(R.id.emptyFragment, oneFragment); }else { fragmentTransaction.show(oneFragment); } //一定要记得提交 fragmentTransaction.commit(); } } public void showTwoFragment() { if (!(fragmentAll instanceof TwoFragment)) { FragmentTransaction fragmentTransaction = getSupportFragmentManager() .beginTransaction(); //如果所有的fragment都不为空的话,把所有的fragment都进行隐藏。最开始进入应用程序,fragment为空时,此方法不执行 hideFragment(fragmentTransaction); //如果这个fragment为空的话,就创建一个fragment,并且把它加到ft中去.如果不为空,就把它直接给显示出来 if(twoFragment == null){ twoFragment = new TwoFragment(); fragmentTransaction.add(R.id.emptyFragment, twoFragment); }else { fragmentTransaction.show(twoFragment); } //一定要记得提交 fragmentTransaction.commit(); } } public void showThreeFragment() { if (!(fragmentAll instanceof ThreeFragment)) { FragmentTransaction fragmentTransaction = getSupportFragmentManager() .beginTransaction(); //如果所有的fragment都不为空的话,把所有的fragment都进行隐藏。最开始进入应用程序,fragment为空时,此方法不执行 hideFragment(fragmentTransaction); //如果这个fragment为空的话,就创建一个fragment,并且把它加到ft中去.如果不为空,就把它直接给显示出来 if(threeFragment == null){ threeFragment = new ThreeFragment(); fragmentTransaction.add(R.id.emptyFragment, threeFragment); }else { fragmentTransaction.show(threeFragment); } //一定要记得提交 fragmentTransaction.commit(); } } //隐藏fragment public void hideFragment(FragmentTransaction fragmentTransaction){ if(oneFragment != null){ fragmentTransaction.hide(oneFragment); } if(twoFragment != null){ fragmentTransaction.hide(twoFragment); } if(threeFragment != null){ fragmentTransaction.hide(threeFragment); } } }OneFragment.java:
package com.iwanghang.fragmenttransactiondemo; import android.os.Bundle; import android.support.v4.app.Fragment; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; public class OneFragment extends Fragment { private View rootView; @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { if(container==null) return null; rootView = inflater.inflate(R.layout.fragment_one, container,false); return rootView; } }TwoFragment.java:
package com.iwanghang.fragmenttransactiondemo; import android.os.Bundle; import android.support.v4.app.Fragment; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; public class TwoFragment extends Fragment { private View rootView; @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { if(container==null) return null; rootView = inflater.inflate(R.layout.fragment_two, container,false); return rootView; } }Three.java:
package com.iwanghang.fragmenttransactiondemo; import android.os.Bundle; import android.support.v4.app.Fragment; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; public class ThreeFragment extends Fragment { private View rootView; @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { if(container==null) return null; rootView = inflater.inflate(R.layout.fragment_three, container,false); return rootView; } }activity_main.xml:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" tools:context=".MainActivity" > <FrameLayout android:id="@+id/emptyFragment" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_above="@+id/buttonList"> </FrameLayout> <LinearLayout android:id="@+id/buttonList" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_alignParentBottom="true" android:orientation="horizontal" > <!--android:id="@+id/oneLinearLayout"--> <LinearLayout android:id="@+id/oneLinearLayout" android:layout_width="match_parent" android:layout_weight="1" android:orientation="horizontal" android:layout_height="50dp"> <ImageView android:id="@+id/imageView_renwuliebiao" android:layout_gravity="center" android:layout_width="40dp" android:layout_height="40dp" android:src="@drawable/page" /> <TextView android:layout_width="fill_parent" android:layout_height="fill_parent" android:gravity="center" android:text="第一页" android:textSize="20dp" android:textColor="#000000"/> </LinearLayout> <!--android:id="@+id/rbAddress"--> <LinearLayout android:id="@+id/twoLinearLayout" android:layout_width="match_parent" android:layout_weight="1" android:orientation="horizontal" android:layout_height="50dp"> <ImageView android:id="@+id/imageView_renwuliebiao2" android:layout_gravity="center" android:layout_width="40dp" android:layout_height="40dp" android:src="@drawable/page" /> <TextView android:layout_width="fill_parent" android:layout_height="fill_parent" android:gravity="center" android:text="第二页" android:textSize="20dp" android:textColor="#000000"/> </LinearLayout> <!--android:id="@+id/threeLinearLayout"--> <LinearLayout android:id="@+id/threeLinearLayout" android:layout_width="match_parent" android:layout_weight="1" android:orientation="horizontal" android:layout_height="50dp"> <ImageView android:id="@+id/imageView_renwuliebiao3" android:layout_gravity="center" android:layout_width="40dp" android:layout_height="40dp" android:src="@drawable/page" /> <TextView android:layout_width="fill_parent" android:layout_height="fill_parent" android:gravity="center" android:text="第三页" android:textSize="20dp" android:textColor="#000000"/> </LinearLayout> </LinearLayout> </RelativeLayout>fragment_one.xml:
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <TextView android:layout_width="match_parent" android:layout_height="match_parent" android:text="Fragment One" android:textSize="20sp" android:textColor="#000000" android:background="#FF00FF"/> </LinearLayout>fragment_two.xml:
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <TextView android:layout_width="match_parent" android:layout_height="wrap_content" android:text="Fragment Two" android:textSize="20sp" android:textColor="#000000" android:background="#FF0000"/> <EditText android:layout_width="match_parent" android:layout_height="wrap_content" /> </LinearLayout>fragment_three.xml:
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <TextView android:layout_width="match_parent" android:layout_height="match_parent" android:text="Fragment Three" android:textSize="20sp" android:textColor="#000000" android:background="#0000FF"/> </LinearLayout>page.png: