import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentActivity;
import android.support.v4.app.FragmentPagerAdapter;
import android.support.v4.app.FragmentStatePagerAdapter;
import android.support.v4.view.PagerAdapter;
import android.support.v4.view.ViewPager;
import android.support.v4.view.ViewPager.OnPageChangeListener;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.view.Window;
import android.widget.ImageView;
import android.widget.TextView;
public class MainActivity extends FragmentActivity implements OnClickListener {
private ViewPager mViewPager;
private PagerAdapter mPagerAdapter;
private PagerAdapter mFragmentPagerAdapter;
private PagerAdapter mFragmentStatePagerAdapter;
private List<Fragment> mFragments = new ArrayList<Fragment>();
//标题
TextView tv_title;
//四个TextView控件
private TextView[] mTabTVs = new TextView[4];
//四个控件【未】按下时的图片id
private int[] mTabTVIdsNormal;
//四个控件按下时的图片id
private int[] mTabTVIdsPress;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);//取消标题栏
setContentView(R.layout.main2);
tv_title = (TextView) findViewById(R.id.tv_title);
tv_title.setOnClickListener(this);
initTabs();
initViewPage();
initPagerAdapter();
setTabSelection(mTabTVs[0]);
//mViewPager.setAdapter(mPagerAdapter);
mViewPager.setAdapter(mFragmentPagerAdapter);//FragmentPagerAdapter类内的每一个生成的 【Fragment】 都将保存在内存之中
//mViewPager.setAdapter(mFragmentStatePagerAdapter);
}
private void initTabs() {
mTabTVs[0] = (TextView) findViewById(R.id.tv_tab_bottom_weixin);
mTabTVs[1] = (TextView) findViewById(R.id.tv_tab_bottom_friend);
mTabTVs[2] = (TextView) findViewById(R.id.tv_tab_bottom_contact);
mTabTVs[3] = (TextView) findViewById(R.id.tv_tab_bottom_setting);
mTabTVIdsNormal = new int[] { R.drawable.tab_weixin_normal, R.drawable.tab_find_frd_normal, R.drawable.tab_address_normal,
R.drawable.tab_settings_normal };
mTabTVIdsPress = new int[] { R.drawable.tab_weixin_pressed, R.drawable.tab_find_frd_pressed, R.drawable.tab_address_pressed,
R.drawable.tab_settings_pressed };
//给四个控件设置一个Tag,当我们点击某个控件时可以根据这个Tag来识别此控件,当然我们也可以根据v.getid()来识别,但在这里setTag还有其他妙用
for (int i = 0; i < mTabTVs.length; i++) {
mTabTVs[i].setOnClickListener(this);
mTabTVs[i].setTag(i);
}
}
private void initViewPage() {
MainTabFragment wx = MainTabFragment.newInstance("微信 Arguments");
MainTabFragment friend = MainTabFragment.newInstance("通讯录 Arguments");
MainTabFragment find = MainTabFragment.newInstance("发现 Arguments");
MainTabFragment mine = MainTabFragment.newInstance("我 Arguments");
mFragments.add(wx);
mFragments.add(friend);
mFragments.add(find);
mFragments.add(mine);
mViewPager = (ViewPager) findViewById(R.id.id_viewpager);
mViewPager.setOnPageChangeListener(new OnPageChangeListener() {
@Override
public void onPageSelected(int position) {
setTabSelection(mTabTVs[position]);
}
@Override
public void onPageScrollStateChanged(int arg0) {
}
@Override
public void onPageScrolled(int arg0, float arg1, int arg2) {
}
});
}
private void initPagerAdapter() {
mPagerAdapter = new PagerAdapter() {
@Override
public boolean isViewFromObject(View view, Object object) { // 判断是否是同一条目
return view == object;
}
@Override
public int getCount() {
return mFragments.size();
}
public Object instantiateItem(ViewGroup container, int position) {// 初始化要显示的条目
ImageView imageView = new ImageView(MainActivity.this);
imageView.setImageResource(R.drawable.ic_launcher);
container.addView(imageView);//一定将要显示的条目加入到ViewGroup的缓存容器中才可以显示
return imageView;
}
public void destroyItem(ViewGroup container, int position, Object object) {//将要销毁的条目从ViewGroup的缓存容器中移除
container.removeView((View) object);
}
};
mFragmentPagerAdapter = new FragmentPagerAdapter(getSupportFragmentManager()) {
@Override
public int getCount() {
return mFragments.size();
}
@Override
public Fragment getItem(int position) {//只有在【新】生成 Fragment 对象时调用。注意:在调用notifyDataSetChanged() 后不会被调用
Log.i("bqt", "【getItem】被调用了-" + position);
return mFragments.get(position);
}
};
mFragmentStatePagerAdapter = new FragmentStatePagerAdapter(getSupportFragmentManager()) {
@Override
public int getCount() {
return mFragments.size();
}
@Override
public Fragment getItem(int position) {//尼玛尼玛尼玛:在调用notifyDataSetChanged() 后也会被调用啊!
Log.i("bqt", "【getItem】被调用了-" + position);
return mFragments.get(position);
}
};
}
@Override
/**
*当下面tab的状态改变时,更改ViewPager选中项
*/
public void onClick(View v) {
switch (v.getId()) {
case R.id.tv_title:
MainTabFragment fragment = (MainTabFragment) mFragments.get(mViewPager.getCurrentItem());
fragment.notifyData(new SimpleDateFormat("\nmm分 ss秒 SSS毫秒").format(new Date()));
break;
case R.id.tv_tab_bottom_weixin:
case R.id.tv_tab_bottom_friend:
case R.id.tv_tab_bottom_contact:
case R.id.tv_tab_bottom_setting:
setTabSelection(v);
mViewPager.setCurrentItem((Integer) v.getTag());
break;
default:
break;
}
}
/**
*当ViewPager选中项改变时,更改下面tab的状态
*/
private void setTabSelection(View v) {
//清除掉所有的选中状态
for (int i = 0; i < mTabTVs.length; i++) {
mTabTVs[i].setCompoundDrawablesWithIntrinsicBounds(0, mTabTVIdsNormal[i], 0, 0);
mTabTVs[i].setSelected(false);
}
// 改变控件的图片,这里的setSelected是为了演示通过selector来改变文字颜色
int index = (Integer) v.getTag();
((TextView) v).setCompoundDrawablesWithIntrinsicBounds(0, mTabTVIdsPress[index], 0, 0);
v.setSelected(true);
}
}import java.text.SimpleDateFormat;
import java.util.Date;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
/**
* 使用support.v4.app中的Fragment
* @author 白乾涛
*/
public class MainTabFragment extends Fragment {
private TextView tv;
private String mArgument;
public static final String ARGUMENT = "name";
/**构造时把传入的参数带进来*/
public static MainTabFragment newInstance(String argument) {
Bundle bundle = new Bundle();
bundle.putString(ARGUMENT, argument);
MainTabFragment fragment = new MainTabFragment();
fragment.setArguments(bundle);
return fragment;
}
@Override
public void onCreate(Bundle savedInstanceState) {//创建【Fragment】时回调,只会调用一次,在Activity的onCreate()方法之【后】执行
super.onCreate(savedInstanceState);
Bundle bundle = getArguments();
if (bundle != null) {
mArgument = bundle.getString(ARGUMENT);
}
Log.i("bqt", "【onCreate】-" + mArgument);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {//开始绘制Fragment的【View】时回调
View view = inflater.inflate(R.layout.main_tab_01, container, false);
tv = (TextView) view.findViewById(R.id.tv);
tv.setText(new SimpleDateFormat("mm分 ss秒 SSS毫秒\n").format(new Date()) + mArgument);
Log.i("bqt", "onCreateView-" + mArgument);
return view;
}
@Override
public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {//Fragment的【View】绘制完成时回调
super.onViewCreated(view, savedInstanceState);
Log.i("bqt", "onViewCreated-" + mArgument);
}
@Override
public void onDestroyView() {//与onCreateView对应,销毁Fragment所包含的【View】时调用
super.onDestroy();
Log.i("bqt", "onDestroyView-" + mArgument);
}
@Override
public void onDestroy() {//销毁【Fragment】时被回调,在Activity的onDestroy()方法之【前】执行
super.onDestroy();
Log.i("bqt", "【onDestroy】-" + mArgument);
}
public void notifyData(String data) {
tv.append(data);
}
}