zoukankan      html  css  js  c++  java
  • Android RadioGroup Fragment Viewpager FragmentPagerAdapter 去哪网Fragment嵌套

    RadioGroup中的各个选择器

    1 <selector xmlns:android="http://schemas.android.com/apk/res/android">
    2     <item android:state_checked="false" android:drawable="@color/bg_checked"/>
    3     <item android:state_checked="true" android:drawable="@color/bg_normal"/>
    4 </selector>
    bg_selector.xml
    1 <selector xmlns:android="http://schemas.android.com/apk/res/android">
    2     <item android:state_checked="true" android:drawable="@mipmap/icon_favor_press"/>
    3     <item android:state_checked="false" android:drawable="@mipmap/icon_favor_normal"/>
    4 </selector>
    favor_selector.xml
    1 <selector xmlns:android="http://schemas.android.com/apk/res/android">
    2     <item android:state_checked="true" android:drawable="@mipmap/icon_home_press"/>
    3     <item android:state_checked="false" android:drawable="@mipmap/icon_home_normal"/>
    4 </selector>
    home_selector.xml
    1 <selector xmlns:android="http://schemas.android.com/apk/res/android">
    2     <item android:state_checked="true" android:drawable="@mipmap/icon_order_press"/>
    3     <item android:state_checked="false" android:drawable="@mipmap/icon_order_normal"/>
    4 </selector>
    order_selector
    1 <selector xmlns:android="http://schemas.android.com/apk/res/android">
    2     <item android:state_checked="true" android:drawable="@mipmap/icon_setting_press"/>
    3     <item android:state_checked="false" android:drawable="@mipmap/icon_setting_normal"/>
    4 </selector>
    setting_selector.xml
    1 <selector xmlns:android="http://schemas.android.com/apk/res/android">
    2     <item android:state_checked="true" android:drawable="@mipmap/icon_uc_press"/>
    3     <item android:state_checked="false" android:drawable="@mipmap/icon_uc_normal"/>
    4 </selector>
    uc_selector.xml

    各个Fragment

     1 public class FavorFragment extends Fragment{
     2 
     3     @Nullable
     4     @Override
     5     public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
     6         View layout = inflater.inflate(android.R.layout.simple_list_item_1,null);
     7         return layout;
     8     }
     9 
    10     @Override
    11     public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
    12         super.onViewCreated(view, savedInstanceState);
    13         view.setBackgroundColor(Color.BLUE);
    14         TextView tv = (TextView) view.findViewById(android.R.id.text1);
    15         tv.setText("收藏");
    16         tv.setTextSize(50);
    17     }
    18 }
    FavorFragment.java
     1 public class OrderFragment extends Fragment{
     2 
     3     @Nullable
     4     @Override
     5     public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
     6         View layout = inflater.inflate(android.R.layout.simple_list_item_1,null);
     7         return layout;
     8     }
     9 
    10     @Override
    11     public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
    12         super.onViewCreated(view, savedInstanceState);
    13         view.setBackgroundColor(Color.RED);
    14         TextView tv = (TextView) view.findViewById(android.R.id.text1);
    15         tv.setText("订单");
    16         tv.setTextSize(50);
    17     }
    18 }
    OrderFragment.java
     1 public class SettingFragment extends Fragment{
     2 
     3     @Nullable
     4     @Override
     5     public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
     6         View layout = inflater.inflate(android.R.layout.simple_list_item_1,null);
     7         return layout;
     8     }
     9 
    10     @Override
    11     public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
    12         super.onViewCreated(view, savedInstanceState);
    13         view.setBackgroundColor(Color.WHITE);
    14         TextView tv = (TextView) view.findViewById(android.R.id.text1);
    15         tv.setText("设置");
    16         tv.setTextSize(50);
    17     }
    18 }
    SettingFragment.java
     1 public class UCFragment extends Fragment{
     2 
     3     @Nullable
     4     @Override
     5     public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
     6         View layout = inflater.inflate(android.R.layout.simple_list_item_1,null);
     7         return layout;
     8     }
     9 
    10     @Override
    11     public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
    12         super.onViewCreated(view, savedInstanceState);
    13         view.setBackgroundColor(Color.YELLOW);
    14         TextView tv = (TextView) view.findViewById(android.R.id.text1);
    15         tv.setText("个人中心");
    16         tv.setTextSize(50);
    17     }
    18 }
    UCFragment.java

    首页中还要显示一个ViewPager,一页机票,一页景点,可以左右滑动,自定义指示器

     1 public class JiPiaoFragment extends Fragment{
     2 
     3     @Nullable
     4     @Override
     5     public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
     6         View layout = inflater.inflate(android.R.layout.simple_list_item_1,null);
     7         return layout;
     8     }
     9 
    10     @Override
    11     public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
    12         super.onViewCreated(view, savedInstanceState);
    13         view.setBackgroundColor(Color.DKGRAY);
    14         TextView tv = (TextView) view.findViewById(android.R.id.text1);
    15         tv.setText("机票");
    16         tv.setTextSize(50);
    17     }
    18 }
    JiPiaoFragment.java
     1 public class JingDianFragment extends Fragment{
     2 
     3     @Nullable
     4     @Override
     5     public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
     6         View layout = inflater.inflate(android.R.layout.simple_list_item_1,null);
     7         return layout;
     8     }
     9 
    10     @Override
    11     public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
    12         super.onViewCreated(view, savedInstanceState);
    13         view.setBackgroundColor(Color.MAGENTA);
    14         TextView tv = (TextView) view.findViewById(android.R.id.text1);
    15         tv.setText("景点");
    16         tv.setTextSize(50);
    17     }
    18 }
    JingDianFragment.java
     1 public class HomeFragment extends Fragment implements ViewPager.OnPageChangeListener, RadioGroup.OnCheckedChangeListener {
     2 
     3     List<Fragment> mList = new ArrayList<>();
     4 
     5     @Override
     6     public void onCreate(@Nullable Bundle savedInstanceState) {
     7         super.onCreate(savedInstanceState);
     8         mList.add(new JiPiaoFragment());
     9         mList.add(new JingDianFragment());
    10     }
    11 
    12     @Nullable
    13     @Override
    14     public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
    15         View layout = inflater.inflate(R.layout.fragment_home,null);
    16         return layout;
    17     }
    18 
    19     RadioGroup home_radioGroup;
    20     View view_indicator;
    21     ViewPager home_viewPager;
    22 
    23     @Override
    24     public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
    25         super.onViewCreated(view, savedInstanceState);
    26 
    27         home_radioGroup = (RadioGroup) view.findViewById(R.id.home_radioGroup);
    28         view_indicator =  view.findViewById(R.id.view_indicator);
    29         home_viewPager = (ViewPager) view.findViewById(R.id.home_viewPager);
    30 
    31         //在Fragment中设置FragmentPagerAdapter必须使用getChildFragmentManager
    32         FragmentManager fm = getChildFragmentManager();
    33 
    34         home_viewPager.setAdapter(new MyFragmentPagerAdapter(fm,mList));
    35         home_radioGroup.setOnCheckedChangeListener(this);
    36         home_viewPager.addOnPageChangeListener(this);
    37         //默认
    38         home_radioGroup.check(R.id.jipiao);
    39         initIndicator();
    40     }
    41 
    42     int width;
    43     public void initIndicator(){
    44         //指示器长度分一半
    45         width = getResources().getDisplayMetrics().widthPixels / 2;
    46         FrameLayout.LayoutParams params = new FrameLayout.LayoutParams(width, FrameLayout.LayoutParams.MATCH_PARENT);
    47         view_indicator.setLayoutParams(params);
    48     }
    49 
    50 
    51     @Override
    52     public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
    53         FrameLayout.LayoutParams params = (FrameLayout.LayoutParams) view_indicator.getLayoutParams();
    54         int left = (int) ((position + positionOffset)*width);
    55         params.setMargins(left,0,0,0);
    56         view_indicator.setLayoutParams(params);
    57     }
    58 
    59     @Override
    60     public void onPageSelected(int position) {
    61         home_radioGroup.check(position == 0?R.id.jipiao:R.id.jingdian);
    62     }
    63 
    64     @Override
    65     public void onPageScrollStateChanged(int state) {
    66 
    67     }
    68 
    69     @Override
    70     public void onCheckedChanged(RadioGroup group, int checkedId) {
    71         home_viewPager.setCurrentItem(checkedId == R.id.jipiao? 0 : 1);
    72     }
    73 }
    HomeFragment.java

    由于需要创建很多Fragment实例,这里用工厂模式或者反射方式创建

     1 public class FragmentUtils {
     2 
     3     //工厂模式
     4 
     5     public static final Fragment newInstance(int type){
     6 
     7         switch (type){
     8             case 0:
     9                 return new FavorFragment();
    10             case 1:
    11                 return new OrderFragment();
    12             case 2:
    13                 return new HomeFragment();
    14             case 3:
    15                 return new UCFragment();
    16             case 4:
    17                 return new SettingFragment();
    18         }
    19         return null;
    20     }
    21 
    22     //反射方式
    23     public static final String[] classNames = {"Favor","Order","Home","UC","Setting"};
    24 
    25     public static final Fragment getInstance(int type){
    26         try {
    27             //通过一个类的字符串对象,转换成一个class类类型
    28             Class className = Class.forName("com.example.lesson10_viewpager_fragmentpageradapter_childfragment."+classNames[type]+"Fragment");
    29             //通过类的类型去创建实例,必须有无参构造方法,并公开
    30             return (Fragment) className.newInstance();
    31 
    32         } catch (ClassNotFoundException e) {
    33             e.printStackTrace();
    34         } catch (InstantiationException e) {
    35             e.printStackTrace();
    36         } catch (IllegalAccessException e) {
    37             e.printStackTrace();
    38         }
    39 
    40         return null;
    41     }
    42 }
    FragmentUtils.java
     1 public class MyFragmentPagerAdapter extends FragmentPagerAdapter{
     2 
     3     List<Fragment> mList;
     4     public MyFragmentPagerAdapter(FragmentManager fm, List<Fragment> mList) {
     5         super(fm);
     6         this.mList = mList;
     7     }
     8 
     9     @Override
    10     public Fragment getItem(int position) {
    11         return mList.get(position);
    12     }
    13 
    14     @Override
    15     public int getCount() {
    16         return mList.size();
    17     }
    18 }
    MyFragmentPagerAdapter.java
     1 public class MainActivity extends AppCompatActivity implements RadioGroup.OnCheckedChangeListener {
     2 
     3     RadioGroup radioGroup;
     4     Fragment[] fragments = new Fragment[5];
     5 
     6     @Override
     7     protected void onCreate(Bundle savedInstanceState) {
     8         super.onCreate(savedInstanceState);
     9         setContentView(R.layout.activity_main);
    10 
    11         radioGroup = (RadioGroup) findViewById(R.id.radioGroup);
    12         radioGroup.setOnCheckedChangeListener(this);
    13         //默认显示首页
    14         showFragment(2);
    15         radioGroup.check(R.id.rb_home);
    16 
    17     }
    18     int currIndex = -1;
    19 
    20     public void showFragment(int index){
    21         if(index==currIndex){
    22             return;
    23         }
    24         FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
    25         if(currIndex != -1){
    26             ft.hide(fragments[currIndex]);
    27         }
    28 
    29         if(fragments[index]==null){
    30             //创建,用工厂类
    31             fragments[index] = FragmentUtils.newInstance(index);
    32             ft.add(R.id.fl_content,fragments[index]);
    33         }else{
    34             ft.show(fragments[index]);
    35         }
    36 
    37         currIndex = index;
    38         ft.commit();
    39 
    40     }
    41 
    42     @Override
    43     public void onCheckedChanged(RadioGroup group, int checkedId) {
    44         View view = group.findViewById(checkedId);
    45         String tag = view.getTag().toString();
    46         showFragment(Integer.parseInt(tag));
    47     }
    48 
    49 }
    MainActivity.java
  • 相关阅读:
    Symfony框架实战学习
    学习Symfony之环境的搭建
    js的学习 (数组)
    js的学习 (对象)
    js的学习 (语句)
    Django 应用开发(3)
    Django 应用开发(2)
    Django 学习搭建博客
    2-4.通用选择器
    2-3.class选择器
  • 原文地址:https://www.cnblogs.com/Claire6649/p/5997958.html
Copyright © 2011-2022 走看看