参考Android文档安卓开发官方文档:http://wear.techbrood.com/training/implementing-navigation/lateral.html
里面有详细的教程。
activity_main.xml
MainActivity.java
package com.xbmu.google;
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.ViewPager;
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.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.widget.Toast;
import com.xbmu.google.fragment.AppFragment;
import com.xbmu.google.fragment.HomeFragment;
public class MainActivity extends ActionBarActivity implements
OnQueryTextListener {
private ActionBarDrawerToggle drawerToggle;
private ViewPager mViewPager;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
DrawerLayout mDrawerLayout = (DrawerLayout) findViewById(R.id.dl);
//获取ViewPager控件
mViewPager = (ViewPager) findViewById(R.id.vp);
//给ViewPager设置适配器
mViewPager.setAdapter(new MainAdapter(getSupportFragmentManager()));
ActionBar actionBar = getSupportActionBar();
// 设置是否将应用程序图标转变成可点击的图标,并在图标上添加一个向左的箭头。
actionBar.setDisplayHomeAsUpEnabled(true);
actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
Tab tab1 = actionBar.newTab().setText("标签一")
.setTabListener(new MyTabListener());
actionBar.addTab(tab1);
Tab tab2 = actionBar.newTab().setText("标签二")
.setTabListener(new MyTabListener());
actionBar.addTab(tab2);
Tab tab3 = actionBar.newTab().setText("标签三")
.setTabListener(new MyTabListener());
actionBar.addTab(tab3);
Tab tab4 = actionBar.newTab().setText("标签四")
.setTabListener(new MyTabListener());
actionBar.addTab(tab4);
Tab tab5 = actionBar.newTab().setText("标签五")
.setTabListener(new MyTabListener());
actionBar.addTab(tab5);
actionBar.setDisplayHomeAsUpEnabled(true);
actionBar.setHomeButtonEnabled(true);
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();
}
};
mDrawerLayout.setDrawerListener(drawerToggle);
// 让开关和actionBar建立关系
drawerToggle.syncState();
//监听ViewPager页面的变化
mViewPager
.setOnPageChangeListener(new ViewPager.SimpleOnPageChangeListener() {
//当viewPager页面发生变化的时候调用
@Override
public void onPageSelected(int position) {
getSupportActionBar().setSelectedNavigationItem(
position);
}
});
}
private class MainAdapter extends FragmentStatePagerAdapter {
public MainAdapter(FragmentManager fm) {
super(fm);
// TODO Auto-generated constructor stub
}
//每条目录返回的是Fragment
@Override
public Fragment getItem(int position) {
if (position == 0) {
return new HomeFragment();
} else {
return new AppFragment();
}
}
//一共有几条目录
@Override
public int getCount() {
return 4;
}
}
private class MyTabListener implements TabListener {
@Override
public void onTabReselected(Tab arg0, FragmentTransaction arg1) {
// TODO Auto-generated method stub
}
//当tab标签被选中的时候,viewPagr切换到指定位置
@Override
public void onTabSelected(Tab tab, FragmentTransaction ft) {
mViewPager.setCurrentItem(tab.getPosition());
}
@Override
public void onTabUnselected(Tab arg0, FragmentTransaction arg1) {
// TODO Auto-generated method stub
}
}
//......
}
HomeFragment.java
package com.xbmu.google.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 {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
TextView textView = new TextView(getActivity());
textView.setText("我是HomeFragment");
textView.setTextSize(20);
return textView;
}
}
AppFragment和HomeFragment暂时性一样
参考Android文档安卓开发官方文档:http://wear.techbrood.com/training/implementing-navigation/lateral.html
activity_main.xml
MainActivity.java
package com.xbmu.google;
import android.annotation.SuppressLint;
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.view.PagerTabStrip;
import android.support.v4.view.ViewPager;
import android.support.v4.widget.DrawerLayout;
import android.support.v7.app.ActionBar;
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.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.widget.Toast;
import com.xbmu.google.fragment.AppFragment;
import com.xbmu.google.fragment.HomeFragment;
public class MainActivity extends ActionBarActivity implements
OnQueryTextListener {
private ActionBarDrawerToggle drawerToggle;
private ViewPager mViewPager;
private DrawerLayout mDrawerLayout;
private PagerTabStrip mPagerTabStrip;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mDrawerLayout = (DrawerLayout) findViewById(R.id.dl);
//获取ViewPager控件
mViewPager = (ViewPager) findViewById(R.id.vp);
//给ViewPager设置适配器
mViewPager.setAdapter(new MainAdapter(getSupportFragmentManager()));
mPagerTabStrip = (PagerTabStrip) findViewById(R.id.pager_title_strip);
//设置标签下划线的颜色
mPagerTabStrip.setTabIndicatorColor(getResources().getColor(R.color.indicatorcolor));
ActionBar actionBar = getSupportActionBar();
// 设置是否将应用程序图标转变成可点击的图标,并在图标上添加一个向左的箭头。
actionBar.setDisplayHomeAsUpEnabled(true);
//设置是否将应用程序图标转变成可点击的按钮
actionBar.setHomeButtonEnabled(true);
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();
}
};
mDrawerLayout.setDrawerListener(drawerToggle);
// 让开关和actionBar建立关系
drawerToggle.syncState();
}
private class MainAdapter extends FragmentStatePagerAdapter {
public MainAdapter(FragmentManager fm) {
super(fm);
// TODO Auto-generated constructor stub
}
//每条目录返回的是Fragment
@Override
public Fragment getItem(int position) {
if (position == 0) {
return new HomeFragment();
} else {
return new AppFragment();
}
}
//一共有几条目录
@Override
public int getCount() {
return 4;
}
//返回每个条目的title
@Override
public CharSequence getPageTitle(int position) {
return "标签"+position;
}
}
//.......
}
运行效果图:
package com.xbmu.google;
import java.util.LinkedList;
import java.util.List;
import android.os.Bundle;
import android.support.v7.app.ActionBarActivity;
public class BaseActivity extends ActionBarActivity {
//管理运行的所有的activity
static List mActivities = new LinkedList();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
synchronized(mActivities){
mActivities.add(this);
}
init();
initView();
initActionBar();
}
@Override
protected void onDestroy() {
super.onDestroy();
synchronized (mActivities) {
mActivities.remove(this);
}
}
//用于一键推出应用程序
public void killAll(){
//复制一份mActivities的集合
List copy;
synchronized (mActivities) {
copy = new LinkedList(mActivities);
}
for (BaseActivity activity : copy) {
activity.finish();
}
//杀死当前的进程
android.os.Process.killProcess(android.os.Process.myPid());
}
public void initActionBar() {
// TODO Auto-generated method stub
}
public void initView() {
// TODO Auto-generated method stub
}
public void init() {
// TODO Auto-generated method stub
}
}
MainActivity.java
package com.xbmu.google;
import android.annotation.SuppressLint;
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.view.PagerTabStrip;
import android.support.v4.view.ViewPager;
import android.support.v4.widget.DrawerLayout;
import android.support.v7.app.ActionBar;
import android.support.v7.widget.SearchView;
import android.support.v7.widget.SearchView.OnQueryTextListener;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.widget.Toast;
import com.xbmu.google.fragment.AppFragment;
import com.xbmu.google.fragment.HomeFragment;
public class MainActivity extends BaseActivity implements OnQueryTextListener {
private ActionBarDrawerToggle drawerToggle;
private ViewPager mViewPager;
private DrawerLayout mDrawerLayout;
private PagerTabStrip mPagerTabStrip;
@Override
public void initView() {
super.initView();
setContentView(R.layout.activity_main);
mDrawerLayout = (DrawerLayout) findViewById(R.id.dl);
mViewPager = (ViewPager) findViewById(R.id.vp);
mPagerTabStrip = (PagerTabStrip) findViewById(R.id.pager_title_strip);
// 给ViewPager设置适配器
mViewPager.setAdapter(new MainAdapter(getSupportFragmentManager()));
// 设置标签下划线的颜色
mPagerTabStrip.setTabIndicatorColor(getResources().getColor(
R.color.indicatorcolor));
}
@Override
public void initActionBar() {
super.initActionBar();
ActionBar actionBar = getSupportActionBar();
// 设置是否将应用程序图标转变成可点击的图标,并在图标上添加一个向左的箭头。
actionBar.setDisplayHomeAsUpEnabled(true);
// 设置是否将应用程序图标转变成可点击的按钮
actionBar.setHomeButtonEnabled(true);
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();
}
};
mDrawerLayout.setDrawerListener(drawerToggle);
// 让开关和actionBar建立关系
drawerToggle.syncState();
}
private class MainAdapter extends FragmentStatePagerAdapter {
public MainAdapter(FragmentManager fm) {
super(fm);
// TODO Auto-generated constructor stub
}
// 每条目录返回的是Fragment
@Override
public Fragment getItem(int position) {
if (position == 0) {
return new HomeFragment();
} else {
return new AppFragment();
}
}
// 一共有几条目录
@Override
public int getCount() {
return 4;
}
// 返回每个条目的title
@Override
public CharSequence getPageTitle(int position) {
return "标签" + position;
}
}
@SuppressLint("NewApi")
@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.main_activity_actions, 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;
}
/** 处理actionBar菜单条目的点击事件 */
@Override
public boolean onOptionsItemSelected(MenuItem item) {
if (item.getItemId() == R.id.action_search) {
Toast.makeText(getApplicationContext(), "搜素", 0).show();
}
return drawerToggle.onOptionsItemSelected(item)
| super.onOptionsItemSelected(item);
}
// 当搜素文本发生变化的时候
@Override
public boolean onQueryTextChange(String newText) {
Toast.makeText(getApplicationContext(), newText, 0).show();
return false;
}
// 当搜素提交的时候
@Override
public boolean onQueryTextSubmit(String query) {
Toast.makeText(getApplicationContext(), query, 0).show();
return false;
}
}
DetailActivity.java
package com.xbmu.google;
import android.os.Bundle;
import android.support.v7.app.ActionBar;
public class DetailActivity extends BaseActivity {
private ActionBar actionBar;
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_detail);
}
@Override
public void initView() {
setContentView(R.layout.activity_detail);
}
@Override
public void initActionBar() {
actionBar = getSupportActionBar();
actionBar.setDisplayHomeAsUpEnabled(true);
}
}
package com.xbmu.google.application;
import android.app.Application;
import android.content.Context;
/**
* 代表当前应用程序
* @author bitaotao
*/
public class BaseApplication extends Application {
private static Application mContext;
@Override
public void onCreate() {
super.onCreate();
mContext = this;
}
public static Context getmContext() {
return mContext;
}
}
UiUtils.java
package com.xbmu.google.tools;
import android.content.res.Resources;
import com.xbmu.google.application.BaseApplication;
public class UiUtils {
/**
* 获取到字符数组
* @param tabNames 字符数组的id
*/
public static String[] getStringArray(int tabNames) {
return getResource().getStringArray(tabNames);
}
public static Resources getResource() {
return BaseApplication.getmContext().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/strings.xml
GoogleApp
Settings
Hello world!
搜素
页面详情
打开抽屉
关闭抽屉
- 首页
- 应用
- 游戏
- 专题
- 分类
- 排行
MainActivity.java
package com.xbmu.google;
import android.annotation.SuppressLint;
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.view.PagerTabStrip;
import android.support.v4.view.ViewPager;
import android.support.v4.widget.DrawerLayout;
import android.support.v7.app.ActionBar;
import android.support.v7.widget.SearchView;
import android.support.v7.widget.SearchView.OnQueryTextListener;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.widget.Toast;
import com.xbmu.google.fragment.AppFragment;
import com.xbmu.google.fragment.CategoryFragment;
import com.xbmu.google.fragment.GameFragment;
import com.xbmu.google.fragment.HomeFragment;
import com.xbmu.google.fragment.HotFragment;
import com.xbmu.google.fragment.SubjectFragment;
import com.xbmu.google.tools.UiUtils;
public class MainActivity extends BaseActivity implements OnQueryTextListener {
private ActionBarDrawerToggle drawerToggle;
private ViewPager mViewPager;
private DrawerLayout mDrawerLayout;
private PagerTabStrip mPagerTabStrip;
private String[] tab_names;
@Override
public void init() {
tab_names = UiUtils.getStringArray(R.array.tab_names);
}
@Override
public void initView() {
//....
}
@Override
public void initActionBar() {
//....
}
private class MainAdapter extends FragmentStatePagerAdapter {
public MainAdapter(FragmentManager fm) {
super(fm);
// TODO Auto-generated constructor stub
}
// 每条目录返回的是Fragment
@Override
public Fragment getItem(int position) {
if (position == 0) {
return new HomeFragment();
}else if(position == 1){
return new AppFragment();
}else if(position == 2){
return new GameFragment();
}else if(position == 3){
return new SubjectFragment();
}else if(position == 4){
return new CategoryFragment();
}else if(position == 5){
return new HotFragment();
}else{
return null;
}
}
// 一共有几条目录
@Override
public int getCount() {
return tab_names.length;
}
// 返回每个条目的title
@Override
public CharSequence getPageTitle(int position) {
return tab_names[position];
}
}
//.....
}
HomeFragment.java、AppFragment.java、GameFragment.java...都一样
package com.xbmu.google.fragment;
import java.util.HashMap;
import java.util.Map;
import android.support.v4.app.Fragment;
public class FragmentFactory {
private static Map mFragments = new HashMap();
public static Fragment createFragment(int position) {
Fragment fragment = null;
fragment = mFragments.get(position);//在集合中取出来Fragment
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 HotFragment();
}
if(fragment!=null){
mFragments.put(position, fragment);//把创建好的Fragment存放到集合中缓存起来
}
}
return fragment;
}
}
修改MainActivity.java
// 每条目录返回的是Fragment
@Override
public Fragment getItem(int position) {
return FragmentFactory.createFragment(position);
}
package com.xbmu.google.tools;
import android.util.Log;
public class LogUtils {
/** 日志输出级别NONE */
public static final int LEVEL_NONE = 0;
/** 日志输出级别V */
public static final int LEVEL_VERBOSE = 1;
/** 日志输出级别D */
public static final int LEVEL_DEBUG = 2;
/** 日志输出级别I */
public static final int LEVEL_INFO = 3;
/** 日志输出级别W */
public static final int LEVEL_WARN = 4;
/** 日志输出级别E */
public static final int LEVEL_ERROR = 5;
/** 日志输出时的TAG */
private static String mTag = "googleplay";
/** 是否允许输出log */
private static int mDebuggable = LEVEL_ERROR;
/** 用于记时的变量 */
private static long mTimestamp = 0;
/** 以级别为 d 的形式输出LOG */
public static void v(String msg) {
if (mDebuggable >= LEVEL_VERBOSE) {
Log.v(mTag, msg);
}
}
/** 以级别为 d 的形式输出LOG */
public static void d(String msg) {
if (mDebuggable >= LEVEL_DEBUG) {
Log.d(mTag, msg);
}
}
/** 以级别为 i 的形式输出LOG */
public static void i(String msg) {
if (mDebuggable >= LEVEL_INFO) {
Log.i(mTag, msg);
}
}
/** 以级别为 w 的形式输出LOG */
public static void w(String msg) {
if (mDebuggable >= LEVEL_WARN) {
Log.w(mTag, msg);
}
}
/** 以级别为 w 的形式输出Throwable */
public static void w(Throwable tr) {
if (mDebuggable >= LEVEL_WARN) {
Log.w(mTag, "", tr);
}
}
/** 以级别为 w 的形式输出LOG信息和Throwable */
public static void w(String msg, Throwable tr) {
if (mDebuggable >= LEVEL_WARN && null != msg) {
Log.w(mTag, msg, tr);
}
}
/** 以级别为 e 的形式输出LOG */
public static void e(String msg) {
if (mDebuggable >= LEVEL_ERROR) {
Log.e(mTag, msg);
}
}
/** 以级别为 e 的形式输出Throwable */
public static void e(Throwable tr) {
if (mDebuggable >= LEVEL_ERROR) {
Log.e(mTag, "", tr);
}
}
/** 以级别为 e 的形式输出LOG信息和Throwable */
public static void e(String msg, Throwable tr) {
if (mDebuggable >= LEVEL_ERROR && null != msg) {
Log.e(mTag, msg, tr);
}
}
/** 以级别为 e 的形式输出msg信息,附带时间戳,用于输出一个时间段结束点* @param msg 需要输出的msg */
public static void elapsed(String msg) {
long currentTime = System.currentTimeMillis();
long elapsedTime = currentTime - mTimestamp;
mTimestamp = currentTime;
e("[Elapsed:" + elapsedTime + "]" + msg);
}
}
知识点补充,面试中:我们如何直接去退出一个应用程序?
package com.xbmu.google;
import java.util.LinkedList;
import java.util.List;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.os.Bundle;
import android.support.v7.app.ActionBarActivity;
public class BaseActivity extends ActionBarActivity {
//管理运行的所有的activity
static List mActivities = new LinkedList();
private KillAllRecevier recevier;
private class KillAllRecevier extends BroadcastReceiver{
@Override
public void onReceive(Context context, Intent intent) {
finish();
}
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
recevier = new KillAllRecevier();
IntentFilter filter = new IntentFilter("com.xbmu.google.killall");
registerReceiver(recevier, filter);
synchronized(mActivities){
mActivities.add(this);
}
init();
initView();
initActionBar();
}
@Override
protected void onDestroy() {
super.onDestroy();
synchronized (mActivities) {
mActivities.remove(this);
}
if(recevier!=null){
unregisterReceiver(recevier);
recevier=null;
}
}
//用于一键推出应用程序
public void killAll(){
//复制一份mActivities的集合
List copy;
synchronized (mActivities) {
copy = new LinkedList(mActivities);
}
for (BaseActivity activity : copy) {
activity.finish();
}
//杀死当前的进程
android.os.Process.killProcess(android.os.Process.myPid());
}
public void initActionBar() {
// TODO Auto-generated method stub
}
public void initView() {
// TODO Auto-generated method stub
}
public void init() {
// TODO Auto-generated method stub
}
}
//发送广播
sendBroadcast(new Intent("com.xbmu.google.killall"));
package com.xbmu.google.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.view.ViewGroup.LayoutParams;
import android.widget.FrameLayout;
import com.xbmu.google.R;
public class HomeFragment extends Fragment {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
frameLayout = new FrameLayout(getActivity());
init();//在FrameLayout中添加4种不同的界面
showPage();//根据不同的状态显示不同的界面
show();//根据服务器的数据 切换状态
return frameLayout;
}
//在FrameLayout中添加几种不同的界面
private void init() {
}
//根据不同的状态显示不同的界面
private void showPage() {
}
//根据服务器的数据 切换状态
private void show() {
}
}
八、4种界面&五种状态
package com.xbmu.google.fragment;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.view.ViewGroup.LayoutParams;
import android.widget.Button;
import android.widget.FrameLayout;
import com.xbmu.google.R;
public class HomeFragment extends Fragment {
public static final int STATE_UNKNOW = 0;//未知状态
public static final int STATE_LOADING = 1;//加载状态
public static final int STATE_ERROR = 2;//错误状态
public static final int STATE_EMPTY = 3;//空状态
public static final int STATE_SUCCESS = 4;//成功状态
public int state = STATE_UNKNOW;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
frameLayout = new FrameLayout(getActivity());
init();//在FrameLayout中添加4种不同的界面
showPage();//根据不同的状态显示不同的界面
show();//根据服务器的数据 切换状态
return frameLayout;
}
private View loadingView;//加载中的界面
private View errorView;//错误的界面
private View emptyView;//空界面
private View successView;//加载成功的界面
private FrameLayout frameLayout;
/**在FrameLayout中添加几种不同的界面*/
private void init() {
loadingView = createLoadingView();
if(loadingView != null){
frameLayout.addView(loadingView,new LayoutParams(LayoutParams.MATCH_PARENT,LayoutParams.MATCH_PARENT));
}
errorView = createErrorView();
if(errorView != null){
frameLayout.addView(errorView,new LayoutParams(LayoutParams.MATCH_PARENT,LayoutParams.MATCH_PARENT));
}
emptyView = createEmptyView();
if(emptyView != null){
frameLayout.addView(emptyView,new LayoutParams(LayoutParams.MATCH_PARENT,LayoutParams.MATCH_PARENT));
}
showPage();//根据不同的状态显示不同的界面
}
/**根据不同的状态显示不同的界面*/
private void showPage() {
if(loadingView != null){
loadingView.setVisibility(state==STATE_UNKNOW || state==STATE_LOADING ? View.VISIBLE : View.INVISIBLE);
}
if(errorView != null){
errorView.setVisibility(state==STATE_ERROR ? View.VISIBLE : View.INVISIBLE);
}
if(emptyView != null){
emptyView.setVisibility(state==STATE_EMPTY ? View.VISIBLE : View.INVISIBLE);
}
if(state == STATE_SUCCESS){
successView = createSuccessView();
if(successView!=null){
frameLayout.addView(successView, new LayoutParams(LayoutParams.MATCH_PARENT,LayoutParams.MATCH_PARENT));
successView.setVisibility(View.VISIBLE);
}
}
}
private View createSuccessView() {
// TODO Auto-generated method stub
return null;
}
/**根据服务器的数据 切换状态*/
private void show() {
}
/*创建加载空的界面*/
private View createEmptyView() {
View view = View.inflate(getActivity(), R.layout.loadpage_empty, null);
return view;
}
/*创建加载错误的界面*/
private View createErrorView() {
View view =View.inflate(getActivity(), R.layout.loadpage_error, null);
return view;
}
/*创建加载中的界面*/
private View createLoadingView() {
View view = View.inflate(getActivity(), R.layout.loadpage_loading, null);
return view;
}
}
package com.xbmu.google.fragment;
import android.os.Bundle;
import android.os.SystemClock;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.view.ViewGroup.LayoutParams;
import android.widget.Button;
import android.widget.FrameLayout;
import com.xbmu.google.R;
public class HomeFragment extends Fragment {
public static final int STATE_UNKNOW = 0;//未知状态
public static final int STATE_LOADING = 1;//加载状态
public static final int STATE_ERROR = 2;//错误状态
public static final int STATE_EMPTY = 3;//空状态
public static final int STATE_SUCCESS = 4;//成功状态
public int state = STATE_UNKNOW;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
frameLayout = new FrameLayout(getActivity());
init();//在FrameLayout中添加4种不同的界面
showPage();//根据不同的状态显示不同的界面
show();//根据服务器的数据 切换状态
return frameLayout;
}
private View loadingView;//加载中的界面
private View errorView;//错误的界面
private View emptyView;//空界面
private View successView;//加载成功的界面
private FrameLayout frameLayout;
/**在FrameLayout中添加几种不同的界面*/
private void init() {
loadingView = createLoadingView();
if(loadingView != null){
frameLayout.addView(loadingView,new LayoutParams(LayoutParams.MATCH_PARENT,LayoutParams.MATCH_PARENT));
}
errorView = createErrorView();
if(errorView != null){
frameLayout.addView(errorView,new LayoutParams(LayoutParams.MATCH_PARENT,LayoutParams.MATCH_PARENT));
}
emptyView = createEmptyView();
if(emptyView != null){
frameLayout.addView(emptyView,new LayoutParams(LayoutParams.MATCH_PARENT,LayoutParams.MATCH_PARENT));
}
showPage();//根据不同的状态显示不同的界面
}
/**根据不同的状态显示不同的界面*/
private void showPage() {
if(loadingView != null){
loadingView.setVisibility(state==STATE_UNKNOW || state==STATE_LOADING ? View.VISIBLE : View.INVISIBLE);
}
if(errorView != null){
errorView.setVisibility(state==STATE_ERROR ? View.VISIBLE : View.INVISIBLE);
}
if(emptyView != null){
emptyView.setVisibility(state==STATE_EMPTY ? View.VISIBLE : View.INVISIBLE);
}
if(state == STATE_SUCCESS){
successView = createSuccessView();
if(successView!=null){
frameLayout.addView(successView, new LayoutParams(LayoutParams.MATCH_PARENT,LayoutParams.MATCH_PARENT));
successView.setVisibility(View.VISIBLE);
}
}
}
private View createSuccessView() {
// TODO Auto-generated method stub
return null;
}
public enum LoadResult{
ERROR(2),EMPTY(3),SUCCESS(4);
int value;
LoadResult(int value){
this.value = value;
}
public int getValue() {
return value;
}
}
/**根据服务器的数据 切换状态*/
private void show() {
if(state == STATE_ERROR || state == STATE_EMPTY){
state = STATE_LOADING;
}
//请求服务器 获取服务器上数据 进行判断
//请求服务器 返回一个结果
new Thread(){
public void run() {
SystemClock.sleep(2000);
final LoadResult result = load();
getActivity().runOnUiThread(new Runnable() {
@Override
public void run() {
if(result != null){
state = result.getValue();
showPage();//状态改变了,重新判断当前应该显示那个界面
}
}
});
};
}.start();
}
private LoadResult load() {
return LoadResult.ERROR;
}
/*创建加载空的界面*/
private View createEmptyView() {
View view = View.inflate(getActivity(), R.layout.loadpage_empty, null);
return view;
}
/*创建加载错误的界面*/
private View createErrorView() {
View view =View.inflate(getActivity(), R.layout.loadpage_error, null);
Button page_bt = (Button) view.findViewById(R.id.page_bt);
page_bt.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
show();
}
});
return view;
}
/*创建加载中的界面*/
private View createLoadingView() {
View view = View.inflate(getActivity(), R.layout.loadpage_loading, null);
return view;
}
}
ViewUtils.java
package com.xbmu.google.tools;
import android.view.View;
import android.view.ViewGroup;
import android.view.ViewParent;
public class ViewUtils {
public static void removeParent(View v){
// 先找到爹 在通过爹去移除孩子
ViewParent parent = v.getParent();
//所有的控件 都有爹 爹一般情况下 就是ViewGroup
if(parent instanceof ViewGroup){
ViewGroup group=(ViewGroup) parent;
group.removeView(v);
}
}
}
HomeFragment.java
package com.xbmu.google.fragment;
import android.os.Bundle;
import android.os.SystemClock;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.view.ViewGroup.LayoutParams;
import android.widget.Button;
import android.widget.FrameLayout;
import com.xbmu.google.R;
import com.xbmu.google.tools.ViewUtils;
public class HomeFragment extends Fragment {
public static final int STATE_UNKNOW = 0;//未知状态
public static final int STATE_LOADING = 1;//加载状态
public static final int STATE_ERROR = 2;//错误状态
public static final int STATE_EMPTY = 3;//空状态
public static final int STATE_SUCCESS = 4;//成功状态
public int state = STATE_UNKNOW;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
if(frameLayout == null){//之前的frameLayout已经记录了一个爹了 爹是之前的ViewPager
frameLayout = new FrameLayout(getActivity());
init();//在FrameLayout中添加4种不同的界面
}else{
ViewUtils.removeParent(frameLayout);//移除frameLayout之前的爹
}
show();//根据服务器的数据 切换状态
//先干掉之前的爹
return frameLayout;// 拿到当前viewPager 添加这个framelayout
}
//......
}
全部代码:
package com.xbmu.google.fragment;
import android.os.Bundle;
import android.os.SystemClock;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.view.ViewGroup.LayoutParams;
import android.widget.Button;
import android.widget.FrameLayout;
import com.xbmu.google.R;
import com.xbmu.google.tools.ViewUtils;
public class HomeFragment extends Fragment {
public static final int STATE_UNKNOW = 0;//未知状态
public static final int STATE_LOADING = 1;//加载状态
public static final int STATE_ERROR = 2;//错误状态
public static final int STATE_EMPTY = 3;//空状态
public static final int STATE_SUCCESS = 4;//成功状态
public int state = STATE_UNKNOW;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
if(frameLayout == null){//之前的frameLayout已经记录了一个爹了 爹是之前的ViewPager
frameLayout = new FrameLayout(getActivity());
init();//在FrameLayout中添加4种不同的界面
}else{
ViewUtils.removeParent(frameLayout);//移除frameLayout之前的爹
}
show();//根据服务器的数据 切换状态
//先干掉之前的爹
return frameLayout;// 拿到当前viewPager 添加这个framelayout
}
private View loadingView;//加载中的界面
private View errorView;//错误的界面
private View emptyView;//空界面
private View successView;//加载成功的界面
private FrameLayout frameLayout;
/**在FrameLayout中添加几种不同的界面*/
private void init() {
loadingView = createLoadingView();
if(loadingView != null){
frameLayout.addView(loadingView,new LayoutParams(LayoutParams.MATCH_PARENT,LayoutParams.MATCH_PARENT));
}
errorView = createErrorView();
if(errorView != null){
frameLayout.addView(errorView,new LayoutParams(LayoutParams.MATCH_PARENT,LayoutParams.MATCH_PARENT));
}
emptyView = createEmptyView();
if(emptyView != null){
frameLayout.addView(emptyView,new LayoutParams(LayoutParams.MATCH_PARENT,LayoutParams.MATCH_PARENT));
}
showPage();//根据不同的状态显示不同的界面
}
/**根据不同的状态显示不同的界面*/
private void showPage() {
if(loadingView != null){
loadingView.setVisibility(state==STATE_UNKNOW || state==STATE_LOADING ? View.VISIBLE : View.INVISIBLE);
}
if(errorView != null){
errorView.setVisibility(state==STATE_ERROR ? View.VISIBLE : View.INVISIBLE);
}
if(emptyView != null){
emptyView.setVisibility(state==STATE_EMPTY ? View.VISIBLE : View.INVISIBLE);
}
if(state == STATE_SUCCESS){
successView = createSuccessView();
if(successView!=null){
frameLayout.addView(successView, new LayoutParams(LayoutParams.MATCH_PARENT,LayoutParams.MATCH_PARENT));
successView.setVisibility(View.VISIBLE);
}
}
}
private View createSuccessView() {
// TODO Auto-generated method stub
return null;
}
public enum LoadResult{
ERROR(2),EMPTY(3),SUCCESS(4);
int value;
LoadResult(int value){
this.value = value;
}
public int getValue() {
return value;
}
}
/**根据服务器的数据 切换状态*/
private void show() {
if(state == STATE_ERROR || state == STATE_EMPTY){
state = STATE_LOADING;
}
//请求服务器 获取服务器上数据 进行判断
//请求服务器 返回一个结果
new Thread(){
public void run() {
SystemClock.sleep(2000);
final LoadResult result = load();
if(getActivity()!=null){
getActivity().runOnUiThread(new Runnable() {
@Override
public void run() {
if(result != null){
state = result.getValue();
showPage();//状态改变了,重新判断当前应该显示那个界面
}
}
});
}
};
}.start();
showPage();
}
private LoadResult load() {
return LoadResult.ERROR;
}
/*创建加载空的界面*/
private View createEmptyView() {
View view = View.inflate(getActivity(), R.layout.loadpage_empty, null);
return view;
}
/*创建加载错误的界面*/
private View createErrorView() {
View view =View.inflate(getActivity(), R.layout.loadpage_error, null);
Button page_bt = (Button) view.findViewById(R.id.page_bt);
page_bt.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
show();
}
});
return view;
}
/*创建加载中的界面*/
private View createLoadingView() {
View view = View.inflate(getActivity(), R.layout.loadpage_loading, null);
return view;
}
}
运行效果: