5.侧边栏逻辑

UI框架结构图

相互传递数据的时候用这张图看,思路会比较清晰

1. 侧边栏布局

  1. <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
  2. xmlns:tools="http://schemas.android.com/tools"
  3. android:layout_width="match_parent"
  4. android:layout_height="match_parent"
  5. android:background="#000" >//背景黑色
  6. <ListView
  7. android:id="@+id/lv_list"
  8. android:layout_width="match_parent"
  9. android:layout_height="wrap_content"
  10. //没有点击时的那个效果,变成透明的了,写@null也行
  11. android:listSelector="@android:color/transparent"
  12. //分割条透明
  13. android:divider="@android:color/transparent"
  14. //上边远点,要不然不好看
  15. android:layout_marginTop="40dp" />
  16. </RelativeLayout>

listview的子项布局

  1. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  2. android:layout_width="match_parent"
  3. android:layout_height="wrap_content"
  4. android:orientation="vertical"
  5. android:padding="10dp" >
  6. <TextView
  7. android:id="@+id/tv_title"
  8. android:layout_width="wrap_content"
  9. android:layout_height="wrap_content"
  10. android:layout_gravity="center"
  11. android:drawableLeft="@drawable/btn_menu_selector"
  12. android:drawablePadding="5dp"
  13. android:enabled="false"
  14. android:text="新闻"
  15. android:textColor="@drawable/text_menu_selector"
  16. android:textSize="25sp" />
  17. </LinearLayout>

文字旁边的状态选择器,写成enable,在代码中如何使用,看后面

  1. <selector xmlns:android="http://schemas.android.com/apk/res/android">
  2. <item android:state_enabled="true" android:drawable="@drawable/menu_arr_select"/>
  3. <item android:drawable="@drawable/menu_arr_normal"/>
  4. </selector>
  1. <selector xmlns:android="http://schemas.android.com/apk/res/android">
  2. <item android:state_enabled="true" android:color="#f00"/>
  3. <item android:color="@android:color/white"/>
  4. </selector>

2.侧边栏

  1. public class LeftMenuFragment extends BaseFragment {
  2. @ViewInject(R.id.lv_list)//注解的使用
  3. private ListView lvList;
  4. private ArrayList<NewsMenuData> mMenuList;//这在分装JSON数据的分装类中
  5. private int mCurrentPos;// 当前被点击的菜单项
  6. private MenuAdapter mAdapter;
  7. @Override
  8. public View initViews() {
  9. View view = View.inflate(mActivity, R.layout.fragment_left_menu, null);
  10. ViewUtils.inject(this, view);
  11. return view;
  12. }
  13. @Override
  14. public void initData() {
  15. lvList.setOnItemClickListener(new OnItemClickListener() {
  16. @Override
  17. public void onItemClick(AdapterView<?> parent, View view,
  18. int position, long id) {
  19. mCurrentPos = position;
  20. mAdapter.notifyDataSetChanged();//刷新,然后会调用adapter的GetView方法
  21. setCurrentMenuDetailPager(position);// 设置当前菜单详情页
  22. toggleSlidingMenu();// 隐藏
  23. }
  24. });
  25. }
  26. /**
  27. * 切换SlidingMenu的状态
  28. *
  29. * @param b
  30. */
  31. protected void toggleSlidingMenu() {
  32. MainActivity mainUi = (MainActivity) mActivity;//拿到mainactivity
  33. SlidingMenu slidingMenu = mainUi.getSlidingMenu();//拿到slidingmenu对象
  34. slidingMenu.toggle();// 切换状态, 显示时隐藏, 隐藏时显示
  35. }
  36. /**
  37. * 设置当前菜单详情页
  38. *
  39. * @param position
  40. */
  41. protected void setCurrentMenuDetailPager(int position) {
  42. MainActivity mainUi = (MainActivity) mActivity;
  43. ContentFragment fragment = mainUi.getContentFragment();// 获取主页面fragment,所以main需要这个方法
    1. // 获取侧边栏fragment
    2. public LeftMenuFragment getLeftMenuFragment() {
    3. FragmentManager fm = getSupportFragmentManager();
    4. LeftMenuFragment fragment = (LeftMenuFragment) fm
    5. .findFragmentByTag(FRAGMENT_LEFT_MENU);
    6. return fragment;
    7. }
    8. // 获取主页面fragment
    9. public ContentFragment getContentFragment() {
    10. FragmentManager fm = getSupportFragmentManager();
    11. ContentFragment fragment = (ContentFragment) fm
    12. .findFragmentByTag(FRAGMENT_CONTENT);
    13. return fragment;
    14. }

  44. NewsCenterPager pager = fragment.getNewsCenterPager();// 获取新闻中心页面,所以在contentFargment也需要这个方法,这样一步一步的就拿个了NewsCenterPager 的方法
    1. // 获取新闻中心页面
    2. public NewsCenterPager getNewsCenterPager() {
    3. return (NewsCenterPager) mPagerList.get(1);
    4. }
  45. pager.setCurrentMenuDetailPager(position);// 设置当前菜单详情页
  46. }
  47. // 设置网络数据
  48. public void setMenuData(NewsData data) {
  49. // System.out.println("侧边栏拿到数据啦:" + data);
  50. mMenuList = data.data;//这个方法在新闻中心调用了,给侧便栏设置页面
  51. mAdapter = new MenuAdapter();
  52. lvList.setAdapter(mAdapter);
  53. }
  54. /**
  55. * 侧边栏数据适配器
  56. */
  57. class MenuAdapter extends BaseAdapter {
  58. @Override
  59. public int getCount() {
  60. return mMenuList.size();
  61. }
  62. @Override
  63. public NewsMenuData getItem(int position) {
  64. return mMenuList.get(position);
  65. }
  66. @Override
  67. public long getItemId(int position) {
  68. return position;
  69. }
  70. @Override
  71. public View getView(int position, View convertView, ViewGroup parent) {
  72. View view = View.inflate(mActivity, R.layout.list_menu_item, null);
  73. TextView tvTitle = (TextView) view.findViewById(R.id.tv_title);
  74. //下面可以这样写,不过前提是让getItem方法返回NewsMenuData,也可以正常的写mMenuList.get(position)
  75. NewsMenuData newsMenuData = getItem(position);
  76. tvTitle.setText(newsMenuData.title);
  77. if (mCurrentPos == position) {// 判断当前绘制的view是否被选中
  78. // 显示红色
  79. tvTitle.setEnabled(true);
  80. } else {
  81. // 显示白色
  82. tvTitle.setEnabled(false);
  83. }
  84. return view;
  85. }
  86. }
  87. }

来自为知笔记(Wiz)

时间: 2024-11-11 06:47:30

5.侧边栏逻辑的相关文章

android 滑动侧边栏 SlideMenu 源码分析 以及使用手册

我们先看使用方案: 首先 public class MainActivity extends SlidingFragmentActivity 继承SlidingFragmentActivity ,这里面在创建时有创建需要的slidemenu等相关数据. 在Oncreate里面添加 private void init_sm() { sm = getSlidingMenu();   // 获取menu sm.setMode(SlidingMenu.LEFT_RIGHT);// 设置为左右都有 sm.

android用最简单的方法实现QQ5.0的侧边栏滑动效果

先看个效果 使用两个开源项目 开源侧边栏 :me.tangke.slidemenu 开源动画:nineoldandroids-2.4.0.jar 在项目里我使用的是左边activity,右边activity的样式,activityGroup的方式,如果全用Fragment也是一样的,只要获取Fragment的rootView即可; 滑动时用me.tangke.slidemenu是为获取拖动屏幕的比例,其他的菜单栏也可以使用,只是加个动画; 界面所有逻辑代码不动,使用nineoldandroids

django--BBS项目,后端业务逻辑整理

经典的生活价值观 别让人生,输给了心情.心情不是人生的全部,却能左右人生的全部.心情好,什么都好,心情不好,一切都乱了.我们常常不是输给了别人,而是坏心情贬低了我们的形象,降低了我们的能力,扰乱了我们的思维,从而输给了自己. 控制好心情,生活才会处处祥和.好的心态塑造好心情,好心情塑造最出色的你. 静静的过自己的生活,心若不动,风又奈何.你若不伤,岁月无恙. BBS 项目开发逻辑梳理 第一步:先进行数据库设计 数据库设计规则是: 1.先创建基表:用户表.站点表.文章表.标签表.分类表.文章2标签

机器学习—逻辑回归理论简介

下面是转载的内容,主要是介绍逻辑回归的理论知识,先总结一下自己看完的心得 简单来说线性回归就是直接将特征值和其对应的概率进行相乘得到一个结果,逻辑回归则是这样的结果上加上一个逻辑函数 这里选用的就是Sigmoid函数,在坐标尺度很大的情况下类似于阶跃函数 在确认特征对应的权重值也就是回归系数的时候 最常用的方法是最大似然法,EM参数估计,这个是在一阶导数能够有解的前提下 如果一阶导数无法求得解析值,那么一般选取梯度上升法,通过有限次的迭代过程,结合代价函数更新回归系数至收敛 //////////

WordPress窗体化侧边栏

窗体化侧边栏是一个支持 Widget 的侧边栏或者说是窗体化(widgetized)的侧边栏几乎是 WordPress 主题的标准. 首先,什么是窗体化(widgetizing)呢?简单的说,窗体化就是能够通过拖拉就能够整理侧边栏的模块.比如我们需要更改分类和存档的位置,只需要简单把分类和存档列表拖到它们的位置即可,根本不用去修改侧边栏的代码. 教程地址:http://blog.wpjam.com/m/wp-theme-lesson-6e-widgetizing-sidebar/

Oracle 逻辑体系

Oracle 逻辑体系 主题 Oracle 逻辑体系 参考资料 Oracle 逻辑体系 表空间.模式.用户.段.区.块 Oracle中的数据逻辑上存储于表空间,物理上则存储于属于表空间tablespace的数据文件上(DBF文件).表空间的物理体现是一个或多个DBF文件.数据库由一个或多个被称为表空间的逻辑存储单元构成.表空间是数据库恢复的最小单元.表空间是个逻辑上的概念. 模式schema就是指一个用户下所有对象的集合:创建一个新用户,该用户下没有对象则schema不存在,如果创建一个对象,则

linux查看cpu个数,核数,逻辑cpu个数

物理CPU:物理CPU是相对于虚拟CPU而言的概念,指实际存在的处理器,就是我们可以看的见,摸得着的CPU,就是插在主板上面的. 物理核:CPU中包含的物理内核个数,比如我们通常说的双核CPU,单核CPU. 在linux系统下面的/proc/cpuinfo文件的条目中: 1.有多少个不同的physical id就有多少个物理CPU. 2.cpu cores记录了对应的物理CPU(以该条目中的physical id标识)有多少个物理核,现在我们个人使用的单机PC大部分使用的都是双核CPU. 逻辑C

LINUX在逻辑卷基础加盘操作步骤

扩容之前的磁盘状况 [[email protected] ~]# df -h 文件系统             容量 已用 可用已用%%挂载点 /dev/mapper/VolGroup-lv_root 5.3G  2.5G  2.6G  50% / tmpfs                 538M     0  538M   0% /dev/shm /dev/sda1             485M   30M  430M   7% /boot [[email protected] ~]#

Linux高可用集群方案之heartbeat基础原理及逻辑架构

 这篇文章我们主要学习heartbeat高可用集群的基础原理及逻辑架构,以及heartbeat的简单配置  ll  本文导航    · heartbeat之基本原理   · heartbeat之集群组件   · heartbeat之心跳连接   · heartbeat之脑裂(资源争用.资源隔离) · heartbeat之配置文件   · heartbeat至高可用集群配置  ll  要求  掌握heartbeat高可用集群的相关组件及简单配置   heartbeat之基本原理  heartbea