
RadioGroup中的各个选择器
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_checked="false" android:drawable="@color/bg_checked"/>
<item android:state_checked="true" android:drawable="@color/bg_normal"/>
</selector>
bg_selector.xml
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_checked="true" android:drawable="@mipmap/icon_favor_press"/>
<item android:state_checked="false" android:drawable="@mipmap/icon_favor_normal"/>
</selector>
favor_selector.xml
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_checked="true" android:drawable="@mipmap/icon_home_press"/>
<item android:state_checked="false" android:drawable="@mipmap/icon_home_normal"/>
</selector>
home_selector.xml
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_checked="true" android:drawable="@mipmap/icon_order_press"/>
<item android:state_checked="false" android:drawable="@mipmap/icon_order_normal"/>
</selector>
order_selector
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_checked="true" android:drawable="@mipmap/icon_setting_press"/>
<item android:state_checked="false" android:drawable="@mipmap/icon_setting_normal"/>
</selector>
setting_selector.xml
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_checked="true" android:drawable="@mipmap/icon_uc_press"/>
<item android:state_checked="false" android:drawable="@mipmap/icon_uc_normal"/>
</selector>
uc_selector.xml
各个Fragment
public class FavorFragment extends Fragment{ @Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View layout = inflater.inflate(android.R.layout.simple_list_item_1,null);
return layout;
} @Override
public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
view.setBackgroundColor(Color.BLUE);
TextView tv = (TextView) view.findViewById(android.R.id.text1);
tv.setText("收藏");
tv.setTextSize(50);
}
}
FavorFragment.java
public class OrderFragment extends Fragment{ @Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View layout = inflater.inflate(android.R.layout.simple_list_item_1,null);
return layout;
} @Override
public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
view.setBackgroundColor(Color.RED);
TextView tv = (TextView) view.findViewById(android.R.id.text1);
tv.setText("订单");
tv.setTextSize(50);
}
}
OrderFragment.java
public class SettingFragment extends Fragment{ @Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View layout = inflater.inflate(android.R.layout.simple_list_item_1,null);
return layout;
} @Override
public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
view.setBackgroundColor(Color.WHITE);
TextView tv = (TextView) view.findViewById(android.R.id.text1);
tv.setText("设置");
tv.setTextSize(50);
}
}
SettingFragment.java
public class UCFragment extends Fragment{ @Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View layout = inflater.inflate(android.R.layout.simple_list_item_1,null);
return layout;
} @Override
public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
view.setBackgroundColor(Color.YELLOW);
TextView tv = (TextView) view.findViewById(android.R.id.text1);
tv.setText("个人中心");
tv.setTextSize(50);
}
}
UCFragment.java
首页中还要显示一个ViewPager,一页机票,一页景点,可以左右滑动,自定义指示器
public class JiPiaoFragment extends Fragment{ @Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View layout = inflater.inflate(android.R.layout.simple_list_item_1,null);
return layout;
} @Override
public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
view.setBackgroundColor(Color.DKGRAY);
TextView tv = (TextView) view.findViewById(android.R.id.text1);
tv.setText("机票");
tv.setTextSize(50);
}
}
JiPiaoFragment.java
public class JingDianFragment extends Fragment{ @Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View layout = inflater.inflate(android.R.layout.simple_list_item_1,null);
return layout;
} @Override
public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
view.setBackgroundColor(Color.MAGENTA);
TextView tv = (TextView) view.findViewById(android.R.id.text1);
tv.setText("景点");
tv.setTextSize(50);
}
}
JingDianFragment.java
public class HomeFragment extends Fragment implements ViewPager.OnPageChangeListener, RadioGroup.OnCheckedChangeListener { List<Fragment> mList = new ArrayList<>(); @Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mList.add(new JiPiaoFragment());
mList.add(new JingDianFragment());
} @Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View layout = inflater.inflate(R.layout.fragment_home,null);
return layout;
} RadioGroup home_radioGroup;
View view_indicator;
ViewPager home_viewPager; @Override
public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState); home_radioGroup = (RadioGroup) view.findViewById(R.id.home_radioGroup);
view_indicator = view.findViewById(R.id.view_indicator);
home_viewPager = (ViewPager) view.findViewById(R.id.home_viewPager); //在Fragment中设置FragmentPagerAdapter必须使用getChildFragmentManager
FragmentManager fm = getChildFragmentManager(); home_viewPager.setAdapter(new MyFragmentPagerAdapter(fm,mList));
home_radioGroup.setOnCheckedChangeListener(this);
home_viewPager.addOnPageChangeListener(this);
//默认
home_radioGroup.check(R.id.jipiao);
initIndicator();
} int width;
public void initIndicator(){
//指示器长度分一半
width = getResources().getDisplayMetrics().widthPixels / 2;
FrameLayout.LayoutParams params = new FrameLayout.LayoutParams(width, FrameLayout.LayoutParams.MATCH_PARENT);
view_indicator.setLayoutParams(params);
} @Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
FrameLayout.LayoutParams params = (FrameLayout.LayoutParams) view_indicator.getLayoutParams();
int left = (int) ((position + positionOffset)*width);
params.setMargins(left,0,0,0);
view_indicator.setLayoutParams(params);
} @Override
public void onPageSelected(int position) {
home_radioGroup.check(position == 0?R.id.jipiao:R.id.jingdian);
} @Override
public void onPageScrollStateChanged(int state) { } @Override
public void onCheckedChanged(RadioGroup group, int checkedId) {
home_viewPager.setCurrentItem(checkedId == R.id.jipiao? 0 : 1);
}
}
HomeFragment.java
由于需要创建很多Fragment实例,这里用工厂模式或者反射方式创建
public class FragmentUtils { //工厂模式 public static final Fragment newInstance(int type){ switch (type){
case 0:
return new FavorFragment();
case 1:
return new OrderFragment();
case 2:
return new HomeFragment();
case 3:
return new UCFragment();
case 4:
return new SettingFragment();
}
return null;
} //反射方式
public static final String[] classNames = {"Favor","Order","Home","UC","Setting"}; public static final Fragment getInstance(int type){
try {
//通过一个类的字符串对象,转换成一个class类类型
Class className = Class.forName("com.example.lesson10_viewpager_fragmentpageradapter_childfragment."+classNames[type]+"Fragment");
//通过类的类型去创建实例,必须有无参构造方法,并公开
return (Fragment) className.newInstance(); } catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (InstantiationException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} return null;
}
}
FragmentUtils.java
public class MyFragmentPagerAdapter extends FragmentPagerAdapter{ List<Fragment> mList;
public MyFragmentPagerAdapter(FragmentManager fm, List<Fragment> mList) {
super(fm);
this.mList = mList;
} @Override
public Fragment getItem(int position) {
return mList.get(position);
} @Override
public int getCount() {
return mList.size();
}
}
MyFragmentPagerAdapter.java
public class MainActivity extends AppCompatActivity implements RadioGroup.OnCheckedChangeListener { RadioGroup radioGroup;
Fragment[] fragments = new Fragment[5]; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main); radioGroup = (RadioGroup) findViewById(R.id.radioGroup);
radioGroup.setOnCheckedChangeListener(this);
//默认显示首页
showFragment(2);
radioGroup.check(R.id.rb_home); }
int currIndex = -1; public void showFragment(int index){
if(index==currIndex){
return;
}
FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
if(currIndex != -1){
ft.hide(fragments[currIndex]);
} if(fragments[index]==null){
//创建,用工厂类
fragments[index] = FragmentUtils.newInstance(index);
ft.add(R.id.fl_content,fragments[index]);
}else{
ft.show(fragments[index]);
} currIndex = index;
ft.commit(); } @Override
public void onCheckedChanged(RadioGroup group, int checkedId) {
View view = group.findViewById(checkedId);
String tag = view.getTag().toString();
showFragment(Integer.parseInt(tag));
} }
MainActivity.java