用viewPager实现滑动功能后,再在此基础上实现Fragment。
嘛其实是组合使用。
PS:注意要导v4包不然有些方法实现不了!
首先写好布局文件直接上代码:
此为MainActivity界面
<android.support.v4.view.ViewPager android:layout_weight="1" android:id="@+id/main_content" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_above="@+id/line" /> <View android:id="@+id/line" android:layout_width="match_parent" android:layout_height="4dp" android:background="@color/hei" /> <RadioGroup android:layout_weight="8" android:id="@+id/main_radioGroup" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_alignParentBottom="true" android:clickable="true" android:gravity="center" android:orientation="horizontal" android:padding="3dp" android:background="@color/hui"> <RadioButton android:id="@+id/main_home" style="@style/RadioButtonStyle" android:checked="true" android:drawableTop="@mipmap/shouye" android:text="首页"/> <view android:layout_width="4dp" android:layout_height="match_parent" android:background="@color/hei"/> <RadioButton android:id="@+id/main_weather" style="@style/RadioButtonStyle" android:drawableTop="@mipmap/tianqi" android:text="天气"/> <view android:layout_width="4dp" android:layout_height="match_parent" android:background="@color/hei"/> <RadioButton android:id="@+id/main_map" style="@style/RadioButtonStyle" android:drawableTop="@mipmap/ditu" android:text="地图"/> <view android:layout_width="4dp" android:layout_height="match_parent" android:background="@color/hei"/> <RadioButton android:id="@+id/main_my" style="@style/RadioButtonStyle" android:drawableTop="@mipmap/geren" android:text="个人"/> </RadioGroup>其中的样式代码为
<style name="RadioButtonStyle"> <item name="android:layout_width">0dp</item> <item name="android:layout_weight">1</item> <item name="android:layout_height">match_parent</item> <item name="android:layout_marginRight">10dp</item> <item name="android:layout_marginLeft">10dp</item> <item name="android:button">@null</item> <item name="android:gravity">center</item> <item name="android:textColor">@color/hei</item> <item name="android:textSize">10sp</item> </style>然后再写4个fragment界面
布局完成。
因为Java代码实现都有备注我就不多说明了
//继承FragmentActivity用于实现Fragment底部导航栏功能,实现ViewPager.OnPageChangeListener对象用于实现滑动切换界面功能 public class MainActivity extends FragmentActivity implements View.OnClickListener,ViewPager.OnPageChangeListener{ private static final String TAG="MyMainActivity"; private ViewPager viewPager; private RadioGroup radioGroup; private List<Fragment> fragments; @Override protected void onCreate(Bundle savedInstanceState) { // 消除系统标题栏 requestWindowFeature(Window.FEATURE_NO_TITLE); super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); initFragment(); } private void initFragment() { viewPager=findViewById(R.id.main_content); radioGroup=findViewById(R.id.main_radioGroup); findViewById(R.id.main_home).setOnClickListener(this); findViewById(R.id.main_weather).setOnClickListener(this); findViewById(R.id.main_map).setOnClickListener(this); findViewById(R.id.main_my).setOnClickListener(this); // 吧Fragment add进集合用于存放界面数据 fragments=new ArrayList<>(); fragments.add(new HomeFragment()); fragments.add(new WeatherFragment()); fragments.add(new MapFragment()); fragments.add(new MyFragment()); Log.i(TAG,fragments.toString()); // 把viewPager适配进Fragment viewPager.setAdapter(new FragmentPagerAdapter(this.getSupportFragmentManager()) { @Override public Fragment getItem(int position) { // Log.i(TAG+"position", String.valueOf(position)); return fragments.get(position); } // 返回当前视图个数 @Override public int getCount() { return fragments.size(); } }); // 传入一个ViewPager.SimpleOnPageChangeListener对象 viewPager.addOnPageChangeListener(this); } // 设置Fragment点击事件 @Override public void onClick(View v) { switch (v.getId()){ case R.id.main_home: // viewPager调用setCurrentItem方法实现跳转 viewPager.setCurrentItem(0,true); break; case R.id.main_weather: viewPager.setCurrentItem(1,true); break; case R.id.main_map: viewPager.setCurrentItem(2,true); break; case R.id.main_my: viewPager.setCurrentItem(3,true); break; } } @Override public void finish() { super.finish(); // 获取顶层视图 ViewGroup viewGroup= (ViewGroup) getWindow().getDecorView(); // 移除所有子视图 viewGroup.removeAllViews(); } @Override public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { } // 实现滑动切换界面事件 @Override public void onPageSelected(int position) { switch (position){ case 0: radioGroup.check(R.id.main_home); break; case 1: radioGroup.check(R.id.main_weather); break; case 2: radioGroup.check(R.id.main_map); break; case 3: radioGroup.check(R.id.main_my); break; } } @Override public void onPageScrollStateChanged(int state) { } }然后是4个fragment界面的Java代码照样只弄一个样式出来,而且只要继承Fragment就行了
public class MapFragment extends Fragment { private final String TAG ="MapFragment"; private View view; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); } @Override public View onCreateView(LayoutInflater inflater,ViewGroup container, Bundle savedInstanceState) { // 布局文件实例化为view对象 view=inflater.inflate(R.layout.activity_map,container,false); Log.i(TAG,"view"); return view; } @Override public void onDestroyView() { // ((ViewGroup)view.getParent()).removeView(view); super.onDestroyView(); } }以上!
这就是Fragment的实现过程了
之前因为布局问题搞得我以为是界面没适配进去所以多加了几个Log查Bug。