智慧北京:新闻中心菜单切换的实现
2016-11-04 17:07
225 查看
实现:点击菜单选项,页面进行相应的跳转
步骤: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();
![](https://oscdn.geek-share.com/Uploads/Images/Content/202009/24/8ea9a653b1c75c22ac0c444f9da39b67)
NewsCenterTabController
MenuController
各个Controller
如:
MenuControllerHuDong
MenuControllerNews
MenuControllerZhuanTi
MenuControllerZuTu
MenuFragment
ContentFragment
TabController
步骤: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){ } }
相关文章推荐
- 智慧北京:新闻中心新闻菜单数据的加载
- Android-小巫新闻客户端底部菜单切换实现
- 智慧北京:引导页面button的切换实现
- 智慧北京:新闻list页面布局的实现
- 智慧北京:内容页面tab的切换的实现
- 智慧北京:新闻菜单中ViewPager的touch处理
- Android-小巫新闻客户端底部菜单切换实现
- 智慧北京:菜单按钮点击的实现
- Android-小巫新闻客户端底部菜单切换实现
- 智慧北京:主页中内容页面和菜单页面fragment的实现
- 小巫新闻客户端底部菜单切换实现
- ActionBarSherlock与Viewpager及Fragment结合实现仿新闻客户端顶部滑动切换效果
- jquery实现个人中心导航菜单效果和美观都非常不错
- 菜单的创建之CCMenuItemLabel与CCMenuItemToggle(开关按钮) 实现良种选择状态的切换
- 用js实现导航菜单点击切换选中时高亮状态
- 用Fragment实现如新浪微博一样的底部菜单的切换
- 用Fragment实现如新浪微博一样的底部菜单的切换
- JS实现菜单按钮的前进后退切换
- javascript采用数组实现tab菜单切换效果