实现:点击菜单选项,页面进行相应的跳转
步骤:1、原来在NewsCenterTabController里面设置的假数据“textView”需要删除,因为跳转时view不唯一,所以我们需要加一个空的容器,还是采用MVC架构。数据–>List mMenuControllers;
2、设置基类MenuController(模仿之前的tabController),再设置4个Controller的具体内容;
3、再将这些Controller添加到mMenuControllers,数据–>Controller;
4、将View加载进来(设置加载默认的第一个View),设置switchMenu()方法;里面要实现加载视图和加载数据。
加载视图前需要清空容器mContainer.removeAllViews();
5、制作菜单的点击事件:MenuFragment中:内容变化+菜单收起;
6、内容变化功能的实现:(在MenuFragment需要获取ContentFragment的内容,进而对它的子类进行操作)获得当前点击的页面,调用switchMenu()方法来加载视图,顺便在基类TabController加个switchMenu()方法供复写;
7、菜单收起:ui.getSlidingMenu().toggle();
8、设置当前选中的菜单项,mCurrentMenu = position;
同时UI刷新–>adapter.notifyDataSetChanged();
NewsCenterTabController
package huaxa.it.zhihuidemo.base.tab;
import java.util.ArrayList;
import java.util.List;
import com.google.gson.Gson;
import com.lidroid.xutils.HttpUtils;
import com.lidroid.xutils.exception.HttpException;
import com.lidroid.xutils.http.RequestParams;
import com.lidroid.xutils.http.ResponseInfo;
import com.lidroid.xutils.http.callback.RequestCallBack;
import com.lidroid.xutils.http.client.HttpRequest.HttpMethod;
import android.content.Context;
import android.drm.ProcessedData;
import android.graphics.Color;
import android.util.Log;
import android.view.Gravity;
import android.view.View;
import android.widget.FrameLayout;
import android.widget.TextView;
import huaxa.it.zhihuidemo.MainUI;
import huaxa.it.zhihuidemo.base.TabController;
import huaxa.it.zhihuidemo.bean.NewsCenterBean;
import huaxa.it.zhihuidemo.bean.NewsCenterBean.NewsCenterMenuBean;
import huaxa.it.zhihuidemo.fragment.MenuFragment;
import huaxa.it.zhihuidemo.newscenter.MenuController;
import huaxa.it.zhihuidemo.newscenter.tab.MenuControllerHuDong;
import huaxa.it.zhihuidemo.newscenter.tab.MenuControllerNews;
import huaxa.it.zhihuidemo.newscenter.tab.MenuControllerZhuanTi;
import huaxa.it.zhihuidemo.newscenter.tab.MenuControllerZuTu;
import huaxa.it.zhihuidemo.utils.Constans;
/**
*
* @项目名: ZhiHuiDemo
* @包名: huaxa.it.zhihuidemo.base.tab
* @类名: NewsCenterTabController
* @创建者: 黄夏莲
* @创建时间: 2016年10月9日 ,上午7:29:31
*
* @描述: 新闻中心对应的controller
*/
public class NewsCenterTabController extends TabController
{
// private TextView text;
private List<MenuController> mMenuControllers;
private FrameLayout mContainer;
private String TAG = "TAG";
……
/**
* 数据处理
*
* @param json
*/
private void ProcessData(String json)
{
// 1、json解析 String ----> Object
Gson gson = new Gson();
// 第二个参数指的是要转换成的类型,JavaBean的类型
NewsCenterBean bean = gson.fromJson(json, NewsCenterBean.class);
List<NewsCenterMenuBean> mMenuDatas = bean.data;
String title = bean.data.get(0).children.get(0).title;
// 校验一下
Log.i(TAG, "校验" + title);
// 2、将Model设置给View(Model--->View)
// 2-1给菜单加载数据
MenuFragment menuFragment = ((MainUI) mContext).getMenuFragment();
menuFragment.setData(mMenuDatas);
// 2-2给自己的内容实体加载数据
mMenuControllers = new ArrayList<MenuController>();
mMenuControllers.add(new MenuControllerNews(mContext));// 新闻菜单
mMenuControllers.add(new MenuControllerZhuanTi(mContext));// 专题菜单
mMenuControllers.add(new MenuControllerZuTu(mContext));// 组图菜单
mMenuControllers.add(new MenuControllerHuDong(mContext));// 互动菜单
// 加载默认的第一个View
switchMenu(0);
}
@Override
public void switchMenu(int position)
{
// 清空容器
mContainer.removeAllViews();
MenuController menuController = mMenuControllers.get(position);
// 加载视图
View rootView = menuController.getRootView();
mContainer.addView(rootView);
// 加载数据
menuController.initData();
}
}
MenuController
package huaxa.it.zhihuidemo.newscenter;
import android.content.Context;
import android.view.View;
/**
* @项目名: ZhiHuiDemo
* @包名: huaxa.it.zhihuidemo.newscenter
* @类名: NewsCenterMenuNews
* @创建者: 黄夏莲
* @创建时间: 2016年10月18日 ,下午9:52:09
*
* @描述: 新闻页面的菜单的控制器
*/
public abstract class MenuController
{
protected View mRootView;
protected Context mContext;
public MenuController(Context context)
{
this.mContext = context;
mRootView = initView(context);
}
/**
* 初始化View
*
* @return
*/
protected abstract View initView(Context context);
/**
* 获得根视图
*
* @return
*/
public View getRootView()
{
return mRootView;// 将View暴露出去
}
/**
* 初始化数据
*
* @return
*/
public void initData()
{
}
/**
* 获取上下文
*
* @return
*/
public Context getContext()
{
return mContext;
}
}
各个Controller
如:
MenuControllerHuDong
package huaxa.it.zhihuidemo.newscenter.tab;
import android.content.Context;
import android.graphics.Color;
import android.view.Gravity;
import android.view.View;
import android.widget.TextView;
import huaxa.it.zhihuidemo.newscenter.MenuController;
/**
*
* @项目名: ZhiHuiDemo
* @包名: huaxa.it.zhihuidemo.newscenter.tab
* @类名: MenuControllerHuDong
* @创建者: 黄夏莲
* @创建时间: 2016年10月18日 ,下午10:17:01
*
* @描述: 新闻中心中,互动菜单对应的控制器
*/
public class MenuControllerHuDong extends MenuController
{
private TextView tv;
public MenuControllerHuDong(Context context)
{
super(context);
// TODO Auto-generated constructor stub
}
@Override
protected View initView(Context context)
{
tv = new TextView(context);
tv.setTextColor(Color.RED);
tv.setTextSize(24);
tv.setGravity(Gravity.CENTER);
return tv;
}
public void initData(){
tv.setText("新闻中心中,互动菜单的内容");
}
}
MenuControllerNews
package huaxa.it.zhihuidemo.newscenter.tab;
import android.content.Context;
import android.graphics.Color;
import android.view.Gravity;
import android.view.View;
import android.widget.TextView;
import huaxa.it.zhihuidemo.newscenter.MenuController;
/**
* @项目名: ZhiHuiDemo
* @包名: huaxa.it.zhihuidemo.newscenter.tab
* @类名: MenuControllerNews
* @创建者: 黄夏莲
* @创建时间: 2016年10月18日 ,下午10:05:42
*
* @描述: 新闻中心中,新闻菜单对应的控制器
*/
public class MenuControllerNews extends MenuController
{
private TextView tv;
public MenuControllerNews(Context context)
{
super(context);
// TODO Auto-generated constructor stub
}
@Override
protected View initView(Context context)
{
tv = new TextView(context);
tv.setTextColor(Color.RED);
tv.setTextSize(24);
tv.setGravity(Gravity.CENTER);
return tv;
}
public void initData(){
tv.setText("新闻中心中,新闻菜单的内容");
}
}
MenuControllerZhuanTi
package huaxa.it.zhihuidemo.newscenter.tab;
import android.content.Context;
import android.graphics.Color;
import android.view.Gravity;
import android.view.View;
import android.widget.TextView;
import huaxa.it.zhihuidemo.newscenter.MenuController;
/**
*
* @项目名: ZhiHuiDemo
* @包名: huaxa.it.zhihuidemo.newscenter.tab
* @类名: MenuControllerZhuanTi
* @创建者: 黄夏莲
* @创建时间: 2016年10月18日 ,下午10:16:38
*
* @描述: 新闻中心中,专题菜单对应的控制器
*/
public class MenuControllerZhuanTi extends MenuController
{
private TextView tv;
public MenuControllerZhuanTi(Context context)
{
super(context);
// TODO Auto-generated constructor stub
}
@Override
protected View initView(Context context)
{
tv = new TextView(context);
tv.setTextColor(Color.RED);
tv.setTextSize(24);
tv.setGravity(Gravity.CENTER);
return tv;
}
public void initData(){
tv.setText("新闻中心中,专题菜单的内容");
}
}
MenuControllerZuTu
package huaxa.it.zhihuidemo.newscenter.tab;
import android.content.Context;
import android.graphics.Color;
import android.view.Gravity;
import android.view.View;
import android.widget.TextView;
import huaxa.it.zhihuidemo.newscenter.MenuController;
/**
*
* @项目名: ZhiHuiDemo
* @包名: huaxa.it.zhihuidemo.newscenter.tab
* @类名: MenuControllerZuTu
* @创建者: 黄夏莲
* @创建时间: 2016年10月18日 ,下午10:16:22
*
* @描述: 新闻中心中,组图菜单对应的控制器
*/
public class MenuControllerZuTu extends MenuController
{
private TextView tv;
public MenuControllerZuTu(Context context)
{
super(context);
// TODO Auto-generated constructor stub
}
@Override
protected View initView(Context context)
{
tv = new TextView(context);
tv.setTextColor(Color.RED);
tv.setTextSize(24);
tv.setGravity(Gravity.CENTER);
return tv;
}
public void initData(){
tv.setText("新闻中心中,组图菜单的内容");
}
}
MenuFragment
package huaxa.it.zhihuidemo.fragment;
import java.util.List;
import huaxa.it.zhihuidemo.BaseFragment;
import huaxa.it.zhihuidemo.MainUI;
import huaxa.it.zhihuidemo.R;
import huaxa.it.zhihuidemo.bean.NewsCenterBean.NewsCenterMenuBean;
import android.R.color;
import android.content.ClipData.Item;
import android.content.Context;
import android.graphics.Color;
import android.view.Gravity;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.BaseAdapter;
import android.widget.ListAdapter;
import android.widget.ListView;
import android.widget.TextView;
/**
* @项目名: ZhiHuiDemo
* @包名: huaxa.it.zhihuidemo.fragment
* @类名: MenuFragment
* @创建者: 黄夏莲
* @创建时间: 2016年10月5日 ,下午11:32:13
*
* @描述: 菜单页面
*/
public class MenuFragment extends BaseFragment implements OnItemClickListener
{
private ListView mListView;
private List<NewsCenterMenuBean> mMenuDatas; // 菜单对应的数据
private int mCurrentMenu;
private ListAdapter adapter;
@Override
protected View initView()
{
// TextView text = new TextView(mActivity);
//
// text.setText("菜单页面");
// text.setTextSize(25);
// text.setGravity(Gravity.CENTER);
// return text;
mListView = new ListView(mActivity);
//给ListView设置样式
mListView.setBackgroundColor(Color.BLACK);
mListView.setPadding(0, 40, 0, 0);
mListView.setCacheColorHint(android.R.color.transparent);
//给ListView设置Item的onClick事件
mListView.setOnItemClickListener(this);
return mListView;
}
……
public void setData(List<NewsCenterMenuBean> datas)
{
this.mMenuDatas = datas;
//设置默认选中项
mCurrentMenu = 0;
// 设置数据Adapter --> List
adapter = new ListAdapter();
mListView.setAdapter(adapter);
}
……
@Override
public void onItemClick(AdapterView<?> parent, View view, int position,
long id)
{
MainUI ui = (MainUI)mActivity;
// 菜单的点击响应
//1、菜单的收起
ui.getSlidingMenu().toggle();
//2、对应实体内容的改变
ContentFragment contentFragment = ui.getContentFragment();
contentFragment.switchMenu(position);
//3、设置当前选中的菜单
mCurrentMenu = position;
adapter.notifyDataSetChanged();
}
}
ContentFragment
package huaxa.it.zhihuidemo.fragment;
import java.util.ArrayList;
import java.util.List;
import com.jeremyfeinstein.slidingmenu.lib.SlidingMenu;
import com.lidroid.xutils.ViewUtils;
import com.lidroid.xutils.view.annotation.ViewInject;
import huaxa.it.zhihuidemo.BaseFragment;
import huaxa.it.zhihuidemo.MainUI;
import huaxa.it.zhihuidemo.R;
import huaxa.it.zhihuidemo.base.TabController;
import huaxa.it.zhihuidemo.base.tab.SettingTabController;
import huaxa.it.zhihuidemo.base.tab.HomeTabController;
import huaxa.it.zhihuidemo.base.tab.NewsCenterTabController;
import huaxa.it.zhihuidemo.base.tab.GovAffairTabController;
import huaxa.it.zhihuidemo.base.tab.SmartServiceTabController;
import android.R.menu;
import android.support.v4.view.PagerAdapter;
import android.support.v4.view.ViewPager;
import android.view.Menu;
import android.view.View;
import android.view.ViewGroup;
import android.widget.RadioGroup;
import android.widget.RadioGroup.OnCheckedChangeListener;
/**
* @项目名: ZhiHuiDemo
* @包名: huaxa.it.zhihuidemo.fragment
* @类名: ContentFragment
* @创建者: 黄夏莲
* @创建时间: 2016年10月5日 ,下午11:31:04
*
* @描述: 内容页面
*/
public class ContentFragment extends BaseFragment implements
OnCheckedChangeListener
{
// xUtils的view注解要求必须提供id,以使代码不受影响。
@ViewInject(R.id.content_pager)
private ViewPager mViewPager;
@ViewInject(R.id.content_radiogroup)
private RadioGroup mRadioGroup;
private List<TabController> mPagerDatas;
private int currentItem;
……
public void switchMenu(int position)
{
//获取当前点击的tabController页面
TabController tabController = mPagerDatas.get(currentItem);
//加载视图
tabController.switchMenu(position);
}
}
TabController
package huaxa.it.zhihuidemo.base;
import com.jeremyfeinstein.slidingmenu.lib.SlidingMenu;
import huaxa.it.zhihuidemo.MainUI;
import huaxa.it.zhihuidemo.R;
import android.content.Context;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.FrameLayout;
import android.widget.ImageButton;
import android.widget.TextView;
/**
* @项目名: ZhiHuiDemo
* @包名: huaxa.it.zhihuidemo.base
* @类名: TabController
* @创建者: 黄夏莲
* @创建时间: 2016年10月7日 ,下午3:55:14
*
* @描述: Tab页面对应的控制器
*/
public abstract class TabController implements OnClickListener
{
protected View mRootView;
protected Context mContext;
protected ImageButton mIbMenu;
protected TextView mTvTitle;
protected FrameLayout mContentContainer;
……
/**
* 用来切换菜单的方法,如果子类有菜单,复写此类
* @param position
*/
public void switchMenu(int position){
}
}