主要是练习Fragment+Viewpage+Actionbar。
大家是知道actionbar是有tab模式 你添加两个TABs就就会显示 两个tab页
private void initActionBar() { ActionBar actionBar = getSupportActionBar(); // 设置TAB导航模式 actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS); // 添加Tab,获取Tab对象 Tab tab1 = actionBar.newTab().setText("导航1").setTag("0") .setTabListener(new TabListener()); // 添加进ActionBar actionBar.addTab(tab1); // 添加Tab,获取Tab对象 Tab tab2 = actionBar.newTab().setText("导航2").setTag("1") .setTabListener(new TabListener()); // 添加进ActionBar actionBar.addTab(tab2); // 添加Tab,获取Tab对象 Tab tab3 = actionBar.newTab().setText("导航3").setTag("2") .setTabListener(new TabListener()); // 添加进ActionBar actionBar.addTab(tab3); }
//Tab的点击监听 public static class TabListener implements android.support.v7.app.ActionBar.TabListener{ @Override public void onTabReselected(Tab arg0, FragmentTransaction arg1) { } @Override public void onTabSelected(Tab tab, FragmentTransaction arg1) { //获取到Tab的tag,转换成int:0、1、2 int tag=Integer.parseInt(tab.getTag().toString()); //设置Pager的当前页 pager.setCurrentItem(tag); } @Override public void onTabUnselected(Tab arg0, FragmentTransaction arg1) { } }
好了,回到viewpage 我们知道要想使用viewpage
1.要在代码里形成
<android.support.v4.view.ViewPager android:id="@+id/pager" android:layout_width="fill_parent" android:layout_height="fill_parent" > </android.support.v4.view.ViewPager>
private static ViewPager pager;
//ViewPager视图
pager=(ViewPager) findViewById(R.id.pager);
3.然后需要一个PageAdapter 里面放Fragment 去展示出来
MyPagerAdapter adapter = new MyPagerAdapter(getSupportFragmentManager());
4.pageadapter 需要填充数据
package com.example.tabviewpage; import android.support.v4.app.Fragment; import android.support.v4.app.FragmentManager; import android.support.v4.app.FragmentStatePagerAdapter; public class MyPagerAdapter extends FragmentStatePagerAdapter { private final int NUM_ITEM=3; private int [] imgIds={R.drawable.z1,R.drawable.z2,R.drawable.z3}; public MyPagerAdapter(FragmentManager fm) { super(fm); } @Override public Fragment getItem(int arg0) { return MyFragment.newInstance(imgIds[arg0]); } @Override public int getCount() { return NUM_ITEM; } }
getItem 得到当前页的数据
这里会调用Fragment中的静态方法 得到一个Fragment
我们再看看Fragment 类
package com.example.tabviewpage; import android.os.Bundle; import android.support.v4.app.Fragment; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.ImageView; public class MyFragment extends Fragment { public static MyFragment newInstance(int imgId){ MyFragment fragment=new MyFragment(); Bundle bundle=new Bundle(); bundle.putInt("img", imgId); //传参,Bundle fragment.setArguments(bundle); return fragment; } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { return inflater.inflate(R.layout.fragment, container, false); } /**视图创建完成以后,进行View的相关操作:把参数中ImageView 的图片id拿出来,通过id把图片设置给ImageView*/ @Override public void onViewCreated(View view, Bundle savedInstanceState) { super.onViewCreated(view, savedInstanceState); Bundle bundle=getArguments(); int imgId=bundle==null?R.drawable.ic_launcher:bundle.getInt("img"); ImageView imgv=(ImageView) view.findViewById(R.id.imgv_fragment); imgv.setBackgroundResource(imgId); } }
为啥要用bundle 方法和 getArguments方法呢,因为谷歌官方考虑到 Fragment 可能会用到平板 有时候会切换屏幕,但是一旦切换屏幕数据会丢失,用个getArguments 并不会丢失 数据
然后再Fragment 内 OncreateView中将 Fragment视图填充进来,然后再OnViewCreate 将图片设置到背景
End