前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >5.侧边栏逻辑

5.侧边栏逻辑

作者头像
六月的雨
发布2018-05-14 10:44:21
1.6K0
发布2018-05-14 10:44:21
举报
文章被收录于专栏:Android开发指南

UI框架结构图

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

UI框架结构图.jpeg
UI框架结构图.jpeg

1. 侧边栏布局

代码语言:javascript
复制
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:tools="http://schemas.android.com/tools"    android:layout_width="match_parent"    android:layout_height="match_parent"    android:background="#000" >//背景黑色    <ListView        android:id="@+id/lv_list"        android:layout_width="match_parent"        android:layout_height="wrap_content"//没有点击时的那个效果,变成透明的了,写@null也行
        android:listSelector="@android:color/transparent"//分割条透明        android:divider="@android:color/transparent"//上边远点,要不然不好看        android:layout_marginTop="40dp" /></RelativeLayout>

listview的子项布局

代码语言:javascript
复制
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:layout_width="match_parent"    android:layout_height="wrap_content"    android:orientation="vertical"    android:padding="10dp" >    <TextView        android:id="@+id/tv_title"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:layout_gravity="center"        android:drawableLeft="@drawable/btn_menu_selector"        android:drawablePadding="5dp"        android:enabled="false"        android:text="新闻"        android:textColor="@drawable/text_menu_selector"        android:textSize="25sp" /></LinearLayout>

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

代码语言:javascript
复制
<selector xmlns:android="http://schemas.android.com/apk/res/android">    <item android:state_enabled="true" android:drawable="@drawable/menu_arr_select"/>    <item android:drawable="@drawable/menu_arr_normal"/></selector>
代码语言:javascript
复制
<selector xmlns:android="http://schemas.android.com/apk/res/android">    <item android:state_enabled="true" android:color="#f00"/>    <item android:color="@android:color/white"/></selector>

2.侧边栏

代码语言:javascript
复制
public class LeftMenuFragment extends BaseFragment {	@ViewInject(R.id.lv_list)//注解的使用	private ListView lvList;	private ArrayList<NewsMenuData> mMenuList;//这在分装JSON数据的分装类中	private int mCurrentPos;// 当前被点击的菜单项	private MenuAdapter mAdapter;	@Override	public View initViews() {		View view = View.inflate(mActivity, R.layout.fragment_left_menu, null);		ViewUtils.inject(this, view);		return view;	}	@Override	public void initData() {		lvList.setOnItemClickListener(new OnItemClickListener() {			@Override			public void onItemClick(AdapterView<?> parent, View view,					int position, long id) {				mCurrentPos = position;				mAdapter.notifyDataSetChanged();//刷新,然后会调用adapter的GetView方法				setCurrentMenuDetailPager(position);// 设置当前菜单详情页				toggleSlidingMenu();// 隐藏			}		});	}	/**	 * 切换SlidingMenu的状态	 * 	 * @param b	 */	protected void toggleSlidingMenu() {		MainActivity mainUi = (MainActivity) mActivity;//拿到mainactivity		SlidingMenu slidingMenu = mainUi.getSlidingMenu();//拿到slidingmenu对象		slidingMenu.toggle();// 切换状态, 显示时隐藏, 隐藏时显示	}	/**	 * 设置当前菜单详情页	 * 	 * @param position	 */	protected void setCurrentMenuDetailPager(int position) {		MainActivity mainUi = (MainActivity) mActivity;		ContentFragment fragment = mainUi.getContentFragment();// 获取主页面fragment,所以main需要这个方法
// 获取侧边栏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 的方法	 // 获取新闻中心页面	public NewsCenterPager getNewsCenterPager() {		return (NewsCenterPager) mPagerList.get(1);	}
		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;		}	}}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2015-10-27 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档