博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
5.侧边栏逻辑
阅读量:4677 次
发布时间:2019-06-09

本文共 4597 字,大约阅读时间需要 15 分钟。

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需要这个方法
  44.  
  45. // 获取侧边栏fragment
public LeftMenuFragment getLeftMenuFragment() {
FragmentManager fm = getSupportFragmentManager(); LeftMenuFragment fragment = (LeftMenuFragment) fm .findFragmentByTag(FRAGMENT_LEFT_MENU); return fragment; } // 获取主页面fragment public ContentFragment getContentFragment() {
FragmentManager fm = getSupportFragmentManager(); ContentFragment fragment = (ContentFragment) fm .findFragmentByTag(FRAGMENT_CONTENT); return fragment; }
NewsCenterPager pager = fragment.getNewsCenterPager();// 获取新闻中心页面,所以在contentFargment也需要这个方法,这样一步一步的就拿个了
NewsCenterPager
的方法
 
  1. // 获取新闻中心页面
  2. public NewsCenterPager getNewsCenterPager() {
  3. return (NewsCenterPager) mPagerList.get(1);
  4. }
pager.setCurrentMenuDetailPager(position);// 设置当前菜单详情页
}
// 设置网络数据
public void setMenuData(NewsData data) {
// System.out.println("侧边栏拿到数据啦:" + data);
mMenuList = data.data;//这个方法在新闻中心调用了,给侧便栏设置页面
mAdapter = new MenuAdapter();
lvList.setAdapter(mAdapter);
}
/**
* 侧边栏数据适配器
*/
class MenuAdapter extends BaseAdapter {
@Override
public int getCount() {
return mMenuList.size();
}
@Override
public NewsMenuData getItem(int position) {
return mMenuList.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View view = View.inflate(mActivity, R.layout.list_menu_item, null);
TextView tvTitle = (TextView) view.findViewById(R.id.tv_title);
//下面可以这样写,不过前提是让
getItem方法返回
NewsMenuData
也可以正常的写
mMenuList
.
get
(
position
)
NewsMenuData newsMenuData = getItem(position);
tvTitle.setText(newsMenuData.title);
if (mCurrentPos == position) {
// 判断当前绘制的view是否被选中
// 显示红色
tvTitle.setEnabled(true);
} else {
// 显示白色
tvTitle.setEnabled(false);
}
return view;
}
}
}

转载于:https://www.cnblogs.com/sixrain/p/4915704.html

你可能感兴趣的文章
JavaScript中数组的排序方法:1.冒泡排序 2.选择排序
查看>>
Codeforces Round #277.5 (Div. 2) B. BerSU Ball【贪心/双指针/每两个跳舞的人可以配对,并且他们两个的绝对值只差小于等于1,求最多匹配多少对】...
查看>>
loj 6053 简单的函数 —— min_25筛
查看>>
bzoj2809 [Apio2012]dispatching——左偏树(可并堆)
查看>>
python day7
查看>>
Django的信号
查看>>
老子《道德经》第二十五章
查看>>
git教程学习集合
查看>>
CRM创建物料FM2
查看>>
20145228《信息安全系统设计基础》第四次实验实验报告
查看>>
周报_2012第13周(2012/03/25-2012/03/31)
查看>>
读Google三大论文后感
查看>>
3分钟搞明白信用评分卡模型&模型验证
查看>>
ubuntu14.04 mysql数据库允许远程访问设置
查看>>
1. Ruby基础知识
查看>>
ETL总结(扫盲版)
查看>>
Android Studio插件之FindBugs
查看>>
jisuanke
查看>>
Pull解析器解析XML文件和生成XML文件
查看>>
HDU——1059Dividing(母函数或多重背包)
查看>>