高仿威信主界面,不使用任何框架
主要是练习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) {
}
}因为每个tab都有一个特征码 所以转下格式 设置给Viewpage页 就会形成点击也会切换
好了,回到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>2.然后在代码里实例化
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;
}
}
getCount是多少页 也就是 3页
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