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









posted @ 2015-10-27 21:52  梦和远方  阅读(178)  评论(0编辑  收藏  举报