ViewPager加载每一个Fragment的时候,是通过Adapter的getItem来获取到Fragment的条目
FragmentFragmnet.java创建一个集合来放置postion对应的Fragment
package com.ldw.market.fragment;
import java.util.HashMap;
import java.util.Map;
import android.support.v4.app.Fragment;
/*
* 通过Fragment工厂 生产Fragment
*/
public class FragmentFactory {
//创建一个Map,fragment中放在集合中,第一个参数是脚标,第二个是fRAGMENT
private static Map<Integer, Fragment> mFragments = new HashMap<Integer, Fragment>();
public static Fragment createFragment(int position) {
Fragment fragment = null;
//在集合中取出来Fragment
fragment = mFragments.get(position);
//如果再集合中没有取出来 需要重新创建
if (fragment == null) {
if (position == 0) {
fragment = new HomeFragment();
} else if (position == 1) {
fragment = new AppFragment();
} else if (position == 2) {
fragment = new GameFragment();
} else if (position == 3) {
fragment = new SubjectFragment();
} else if (position == 4) {
fragment = new CategoryFragment();
} else if (position == 5) {
fragment = new TopFragment();
}
//保存fragment
if (fragment != null) {
mFragments.put(position, fragment);// 把创建好的Fragment存放到集合中缓存起来
}
}
return fragment;
}
}
主逻辑代码MainActivity.java
package com.ldw.market;
import com.ldw.market.fragment.AppFragment;
import com.ldw.market.fragment.FragmentFactory;
import com.ldw.market.fragment.HomeFragment;
import com.ldw.market.utils.UiUtils;
import junit.framework.AssertionFailedError;
import android.annotation.SuppressLint;
import android.content.Intent;
import android.os.Bundle;
import android.support.v4.app.ActionBarDrawerToggle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentStatePagerAdapter;
import android.support.v4.app.FragmentTransaction;
import android.support.v4.view.PagerTabStrip;
import android.support.v4.view.ViewPager;
import android.support.v4.view.ViewPager.OnPageChangeListener;
import android.support.v4.widget.DrawerLayout;
import android.support.v7.app.ActionBar;
import android.support.v7.app.ActionBar.Tab;
import android.support.v7.app.ActionBar.TabListener;
import android.support.v7.app.ActionBarActivity;
import android.support.v7.widget.SearchView;
import android.support.v7.widget.SearchView.OnQueryTextListener;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.Toast;
public class MainActivity extends BaseActivity implements OnQueryTextListener{
private DrawerLayout mDrawerLayout;
private ActionBarDrawerToggle drawerToggle;
private ViewPager mViewPager;
private PagerTabStrip pager_tab_strip;
private String[] tab_names; // 标签的名字
//加载字符串数组,初始化Tab
@Override
protected void init() {
tab_names = UiUtils.getStringArray(R.array.tab_names);
}
//初始化ActionBar
@Override
protected void initActionBar() {
//添加tab标签名
ActionBar actionBar = getSupportActionBar();
//让拉出显示详情的图片显示,可以拉出详情
actionBar.setDisplayHomeAsUpEnabled(true);
//让按键点击有效
actionBar.setHomeButtonEnabled(true);
//ActionBarDrawerToggle是ActionBar控制抽屉,
//参数1:当前actionBar的Activity,参数2:控制的抽屉,参数3:按钮的图片,参数4和5是描述
drawerToggle = new ActionBarDrawerToggle(this,
mDrawerLayout, R.drawable.ic_drawer_am, R.string.open_drawer,
R.string.close_drawer){
@Override
public void onDrawerClosed(View drawerView) {
super.onDrawerClosed(drawerView);
Toast.makeText(getApplicationContext(), "抽屉关闭了", 0).show();
}
@Override
public void onDrawerOpened(View drawerView) {
super.onDrawerOpened(drawerView);
Toast.makeText(getApplicationContext(), "抽屉打开了", 0).show();
}
};
//设置监听DrawerListener
mDrawerLayout.setDrawerListener(drawerToggle);
// 让开关和actionbar建立关系
drawerToggle.syncState();
}
//初始化界面
@Override
protected void initView(){
setContentView(R.layout.activity_main);
mDrawerLayout = (DrawerLayout) findViewById(R.id.dl);
mViewPager=(ViewPager) findViewById(R.id.vp);
pager_tab_strip = (PagerTabStrip) findViewById(R.id.pager_tab_strip);
// 设置标签下划线的颜色
pager_tab_strip.setTabIndicatorColor(getResources().getColor(R.color.indicatorcolor));
mViewPager.setAdapter(new MainAdapter(getSupportFragmentManager()));
}
//可以继承PageAapter实现ViePager翻页现在继承FragmentStatePagerAdapter可以实现fragement
private class MainAdapter extends FragmentStatePagerAdapter{
public MainAdapter(FragmentManager fm) {
super(fm);
// TODO Auto-generated constructor stub
}
//每一个条目返回的fragment
@Override
public Fragment getItem(int position) {
// 通过Fragment工厂 生产Fragment
return FragmentFactory.createFragment(position);
}
//条目的总数
@Override
public int getCount() {
// TODO Auto-generated method stub
return tab_names.length;
}
// 返回每个条目的标题,设置tab的标签
@Override
public CharSequence getPageTitle(int position) {
return tab_names[position];
}
}
//初始化ActionBar的界面
@SuppressLint("NewApi") @Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
// 如果运行的环境 (部署到什么版本的手机 )大于3.0,低版本的不支持
if (android.os.Build.VERSION.SDK_INT > 11) {
SearchView searchView = (SearchView) menu.findItem(R.id.action_search).getActionView();
searchView.setOnQueryTextListener(this);// 搜索的监听
}
return true;
}
public void click(View v){
Intent intent = new Intent(getApplicationContext(), DetailActivity.class);
startActivity(intent);
}
/** 处理actionBar菜单条目的点击事件 */
@Override
public boolean onOptionsItemSelected(MenuItem item) {
System.out.println("所有");
//当前点击的条目是search
if (item.getItemId() == R.id.action_search) {
Toast.makeText(getApplicationContext(), "搜索", 0).show();
}
//优先处理drawerToggle的点击,drawerToggle出不不了交给父类
return drawerToggle.onOptionsItemSelected(item)|super.onOptionsItemSelected(item);
}
// 当搜索提交的时候
@Override
public boolean onQueryTextChange(String arg0) {
Toast.makeText(getApplicationContext(), arg0, 0).show();
return false;
}
// 当搜索的文本发生变化
@Override
public boolean onQueryTextSubmit(String arg0) {
Toast.makeText(getApplicationContext(), arg0, 0).show();
return false;
}
}
HomeFragment.java
package com.ldw.market.fragment;
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.TextView;
public class HomeFragment extends Fragment {
//创建一个View对象
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
TextView view=new TextView(getActivity());
view.setText("我是HomeFragment");
return view;
}
}
BaseApplication.java来获取到上下文
package com.ldw.market;
import android.app.Application;
import android.content.Context;
/*
* 代表当前应用程序,获取上下文,需要在清单文件中配置
*
*/
public class BaseApplication extends Application {
private static BaseApplication application;
@Override
public void onCreate() {
super.onCreate();
application=this;
}
public static Context getApplication() {
return application;
}
}
工具类UiUtils.java来加载xml文件中的数组
package com.ldw.market.utils;
import android.content.res.Resources;
import com.ldw.market.BaseApplication;
/*
* 工具类,加载字符串
*/
public class UiUtils {
/*
* 获取到字符数组 ,加载XML文件中的字符数组
* @param tabNames 字符数组的id
*/
public static String[] getStringArray(int tabNames) {
return getResource().getStringArray(tabNames);
}
public static Resources getResource() {
//获取到上下文
return BaseApplication.getApplication().getResources();
}
/** dip转换px */
public static int dip2px(int dip) {
final float scale = getResource().getDisplayMetrics().density;
return (int) (dip * scale + 0.5f);
}
/** pxz转换dip */
public static int px2dip(int px) {
final float scale = getResource().getDisplayMetrics().density;
return (int) (px / scale + 0.5f);
}
}
res/values/string.xml
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="app_name">Market</string>
<string name="action_settings">Settings</string>
<string name="hello_world">Hello world!</string>
<string name="action_search">search</string>
<string name="app_detail">应用详情</string>
<string name="open_drawer">抽屉打开了</string>
<string name="close_drawer">抽屉关闭了</string>
<string name="load_error">加载失败,点击重试</string>
<string-array name="tab_names">
<item>首页</item>
<item>应用</item>
<item>游戏</item>
<item>专题</item>
<item>分类</item>
<item>排行</item>
</string-array>
</resources>