RadioGroup+Fragment实现页面之间的切换

1.现在好多APP都用的这种方法,自己开发的时候也写了一个这样的框架,点击是可以实现切换的.先上效果图

RadioGroup+Fragment实现页面之间的切换_第1张图片


2.参考代码

MainActivity 

[java] view plain copy
  1. package com.ythl.shouyoufanli;  
  2.   
  3. import android.os.Bundle;  
  4. import android.support.v4.app.Fragment;  
  5. import android.support.v4.app.FragmentActivity;  
  6. import android.support.v4.app.FragmentManager;  
  7. import android.support.v4.app.FragmentTransaction;  
  8. import android.widget.RadioGroup;  
  9. import android.widget.RadioGroup.OnCheckedChangeListener;  
  10.   
  11. import com.ythl.fragment.FragmentFactory;  
  12.   
  13. /** 
  14.  * @author Administrator 
  15.  * 主界面的活动界面 
  16.  */  
  17. public class MainActivity extends FragmentActivity {  
  18.     private FragmentManager mFragmentManager;  
  19.     private RadioGroup radioGroup;  
  20.     
  21.     @Override  
  22.     protected void onCreate(Bundle savedInstanceState) {  
  23.         super.onCreate(savedInstanceState);  
  24.         setContentView(R.layout.activity);  
  25.   
  26.         //获取FragmentManager  
  27.         mFragmentManager = getSupportFragmentManager();  
  28.           
  29.         //获取radioGroup控件  
  30.         radioGroup = (RadioGroup) findViewById(R.id.rg_tab);  
  31.             
  32.         //监听点击按钮事件,实现不同Fragment之间的切换  
  33.         radioGroup.setOnCheckedChangeListener(new OnCheckedChangeListener() {  
  34.               
  35.        @Override  
  36.        public void onCheckedChanged(RadioGroup group, int checkedId) {  
  37.                 FragmentTransaction transaction = mFragmentManager.beginTransaction();  
  38.                 Fragment fragment = FragmentFactory.getInstanceByIndex(checkedId);  
  39.                 transaction.replace(R.id.fl_content, fragment);  
  40.                 transaction.commit();  
  41.             }  
  42.         });  
  43.     }  
  44.   
  45. }  


activity.xml


[html] view plain copy
  1. xml version="1.0" encoding="utf-8"?>  
  2.   
  3. <LinearLayout  
  4.     android:layout_width="match_parent"  
  5.     android:layout_height="match_parent"  
  6.     android:orientation="vertical"  
  7.     xmlns:android="http://schemas.android.com/apk/res/android">  
  8.   
  9.   
  10.     <FrameLayout  
  11.         android:id="@+id/fl_content"  
  12.         android:layout_width="match_parent"  
  13.         android:layout_height="match_parent"  
  14.         android:layout_weight="1" />  
  15.   
  16.     <RadioGroup  
  17.         android:id="@+id/rg_tab"  
  18.         android:orientation="horizontal"  
  19.         android:layout_width="match_parent"  
  20.         android:layout_height="wrap_content"  
  21.         android:background="@drawable/bottom_tab_bg">  
  22.   
  23.         <RadioButton  
  24.             android:id="@+id/rb_gamecenter"  
  25.             style="@style/main_radiobutton_icon"  
  26.             android:drawableTop="@drawable/ic_launcher"  
  27.             android:text="游戏中心" />  
  28.   
  29.         <RadioButton  
  30.             android:id="@+id/rb_giftcenter"  
  31.             style="@style/main_radiobutton_icon"  
  32.             android:drawableTop="@drawable/ic_launcher"  
  33.             android:text="礼包中心" />  
  34.   
  35.         <RadioButton  
  36.             android:id="@+id/rb_tradecenter"  
  37.             style="@style/main_radiobutton_icon"  
  38.             android:drawableTop="@drawable/ic_launcher"  
  39.             android:text="交易中心" />  
  40.   
  41.         <RadioButton  
  42.             android:id="@+id/rb_accountscenter"  
  43.             style="@style/main_radiobutton_icon"  
  44.             android:drawableTop="@drawable/ic_launcher"  
  45.             android:text="帐号中心" />  
  46.   
  47.     RadioGroup>  
  48.       
  49. LinearLayout>  

FragmentFactory

[java] view plain copy
  1. package com.ythl.fragment;  
  2.   
  3. import com.ythl.shouyoufanli.R;  
  4.   
  5. import android.support.v4.app.Fragment;  
  6.   
  7. /** 
  8.  * @author Administrator 
  9.  * 定义一个工厂模式, 
  10.  * 来实现根据下标的位置返回相应的Fragment 
  11.  */  
  12. public class FragmentFactory {  
  13.     public static Fragment getInstanceByIndex(int index) {  
  14.         Fragment fragment = null;  
  15.         switch (index) {  
  16.             case R.id.rb_gamecenter:  
  17.                 fragment = new GameCenterFragment();  
  18.                 break;  
  19.             case R.id.rb_giftcenter:  
  20.                 fragment = new GiftCenterFragment();  
  21.                 break;  
  22.             case R.id.rb_tradecenter:  
  23.                 fragment = new TradeCenterFragment();  
  24.                 break;  
  25.             case R.id.rb_accountscenter:  
  26.                 fragment = new AccountsCenterFragment();  
  27.                 break;  
  28.         }  
  29.         return fragment;  
  30.     }  
  31. }  


BaseFragment


[java] view plain copy
  1. package com.ythl.fragment;  
  2.   
  3.   
  4.   
  5. import android.os.Bundle;  
  6. import android.support.v4.app.Fragment;  
  7. import android.view.LayoutInflater;  
  8. import android.view.View;  
  9. import android.view.ViewGroup;  
  10.   
  11. import com.ythl.shouyoufanli.MainActivity;  
  12.   
  13. /** 
  14.  * @author Administrator 
  15.  * fragment的基类 
  16.  * 抽取fragment的共性,复用代码 
  17.  */  
  18. public abstract class BaseFragment extends Fragment {  
  19.     //主页面的上下文  
  20.     public  MainActivity mContext;  
  21.     @Override  
  22.     public void onCreate(Bundle savedInstanceState) {  
  23.           
  24.         //获取上下文  
  25.         mContext = (MainActivity) getActivity();  
  26.         super.onCreate(savedInstanceState);  
  27.           
  28.     }  
  29.   
  30.     //一定要实现的方法  
  31.     @Override  
  32.     public View onCreateView(LayoutInflater inflater, ViewGroup container,  
  33.             Bundle savedInstanceState) {  
  34.         return initView();  
  35.     }  
  36.       
  37.     /** 
  38.      * 定义为抽象方法,子类必须实现 
  39.      * @return 
  40.      */  
  41.     public abstract View initView();  
  42.       
  43.     /** 
  44.      * 初始化数据 
  45.      */  
  46.     public void initData() {  
  47.           
  48.     }  
  49.   
  50.     /** 
  51.      * 初始化事件 
  52.      */  
  53.     public void initEvent() {  
  54.           
  55.     }  
  56.       
  57.     //此方法只执行一次  
  58.     @Override  
  59.     public void onActivityCreated(Bundle savedInstanceState) {  
  60.         //只要activity 不销毁,此方法 就只调用一次  
  61.         initData();  
  62.         initEvent();  
  63.           
  64.         super.onActivityCreated(savedInstanceState);  
  65.     }  
  66.       
  67.     @Override  
  68.     public void onStart() {  
  69.           
  70.         super.onStart();  
  71.     }  
  72. }  

每一个Fragment中的代码
AccountsCenterFragment

[java] view plain copy
  1. package com.ythl.fragment;  
  2.   
  3. import android.graphics.Color;  
  4. import android.view.View;  
  5. import android.widget.TextView;  
  6.   
  7.   
  8. /** 
  9.  * @author Administrator 
  10.  * 帐号中心的Fragment 
  11.  */  
  12. public class AccountsCenterFragment extends BaseFragment{  
  13.   
  14.     @Override  
  15.     public View initView() {  
  16.         TextView tv = new TextView(mContext);  
  17.         tv.setText("帐号中心");  
  18.         tv.setTextColor(Color.BLACK);  
  19.         tv.setTextSize(30);  
  20.         return tv;  
  21.     }  
  22.   
  23. }  


GameCenterFragment

[java] view plain copy
  1. package com.ythl.fragment;  
  2.   
  3. import android.graphics.Color;  
  4. import android.view.View;  
  5. import android.widget.TextView;  
  6.   
  7.   
  8. /** 
  9.  * @author Administrator 
  10.  * 游戏中心的Fragment 
  11.  */  
  12. public class GameCenterFragment extends BaseFragment{  
  13.   
  14.     @Override  
  15.     public View initView() {  
  16.         TextView tv = new TextView(mContext);  
  17.         tv.setText("游戏中心");  
  18.         tv.setTextColor(Color.BLACK);  
  19.         tv.setTextSize(30);  
  20.         return tv;  
  21.     }  
  22.   
  23. }  


GiftCenterFragment

[java] view plain copy
  1. package com.ythl.fragment;  
  2.   
  3. import android.graphics.Color;  
  4. import android.view.View;  
  5. import android.widget.TextView;  
  6.   
  7.   
  8.   
  9. /** 
  10.  * @author Administrator 
  11.  * 礼包中心的Fragment 
  12.  */  
  13. public class GiftCenterFragment extends BaseFragment{  
  14.   
  15.     @Override  
  16.     public View initView() {  
  17.         TextView tv = new TextView(mContext);  
  18.         tv.setText("礼包中心");  
  19.         tv.setTextColor(Color.BLACK);  
  20.         tv.setTextSize(30);  
  21.         return tv;  
  22.     }  
  23.   
  24. }  


TradeCenterFragment

[java] view plain copy
  1. package com.ythl.fragment;  
  2.   
  3. import android.graphics.Color;  
  4. import android.view.View;  
  5. import android.widget.TextView;  
  6.   
  7.   
  8. /** 
  9.  * @author Administrator 
  10.  * 交易中心的Fragment 
  11.  */  
  12. public class TradeCenterFragment extends BaseFragment{  
  13.   
  14.     @Override  
  15.     public View initView() {  
  16.         TextView tv = new TextView(mContext);  
  17.         tv.setText("交易中心");  
  18.         tv.setTextColor(Color.BLACK);  
  19.         tv.setTextSize(30);  
  20.         return tv;  
  21.     }  
  22.   
  23. }  

主页的底部的图标


[html] view plain copy
  1.   
  2. <style name="main_radiobutton_icon">  
  3.     <item name="android:background">#00000000item>  
  4.     <item name="android:layout_width">0dpitem>  
  5.     <item name="android:layout_height">wrap_contentitem>  
  6.     <item name="android:layout_weight">1item>  
  7.     <item name="android:gravity">center_horizontalitem>  
  8.     <item name="android:textSize">12spitem>  
  9.     <item name="android:textColor">@color/rb_text_selectoritem>  
  10.     <item name="android:button">@nullitem>  
  11. style> 

你可能感兴趣的:(android)