5.侧边栏逻辑
UI框架结构图
相互传递数据的时候用这张图看,思路会比较清晰
1. 侧边栏布局
<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" >//背景黑色<ListViewandroid: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的子项布局
<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" ><TextViewandroid: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,在代码中如何使用,看后面
<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>
<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.侧边栏
public class LeftMenuFragment extends BaseFragment {@ViewInject(R.id.lv_list)//注解的使用private ListView lvList;private ArrayList<NewsMenuData> mMenuList;//这在分装JSON数据的分装类中private int mCurrentPos;// 当前被点击的菜单项private MenuAdapter mAdapter;@Overridepublic View initViews() {View view = View.inflate(mActivity, R.layout.fragment_left_menu, null);ViewUtils.inject(this, view);return view;}@Overridepublic void initData() {lvList.setOnItemClickListener(new OnItemClickListener() {@Overridepublic 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;//拿到mainactivitySlidingMenu slidingMenu = mainUi.getSlidingMenu();//拿到slidingmenu对象slidingMenu.toggle();// 切换状态, 显示时隐藏, 隐藏时显示}/*** 设置当前菜单详情页** @param position*/protected void setCurrentMenuDetailPager(int position) {MainActivity mainUi = (MainActivity) mActivity;ContentFragment fragment = mainUi.getContentFragment();// 获取主页面fragment,所以main需要这个方法
// 获取侧边栏fragmentpublic LeftMenuFragment getLeftMenuFragment() {FragmentManager fm = getSupportFragmentManager();LeftMenuFragment fragment = (LeftMenuFragment) fm.findFragmentByTag(FRAGMENT_LEFT_MENU);return fragment;}// 获取主页面fragmentpublic 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 {@Overridepublic int getCount() {return mMenuList.size();}@Overridepublic NewsMenuData getItem(int position) {return mMenuList.get(position);}@Overridepublic long getItemId(int position) {return position;}@Overridepublic 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;}}}


浙公网安备 33010602011771号