智慧北京:新闻中心菜单切换的实现

实现:点击菜单选项,页面进行相应的跳转
步骤: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){

    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值