高仿威信主界面,不使用任何框架

主要是练习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


你可能感兴趣的:(微信)