zoukankan      html  css  js  c++  java
  • 5.侧边栏逻辑

    UI框架结构图
    相互传递数据的时候用这张图看,思路会比较清晰
    UI框架结构图.jpeg

    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. }









  • 相关阅读:
    高德地图API,获取和设置zoom级别和中心点
    高德地图API注册使用教程简答演示
    HTML5 视频流行插件之video.js
    audio实现自定义音频播放器
    HTML5 audio API事件
    HTML5之audio属性
    GitLab的安装及使用教程
    设计模式六大原则(PHP)
    面向对象设计
    自定义的异常类
  • 原文地址:https://www.cnblogs.com/sixrain/p/4915704.html
Copyright © 2011-2022 走看看