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" >//背景黑色    <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的子项布局

<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,在代码中如何使用,看后面

<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;	@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;		}	}}

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏CodingBlock

Android学习笔记(六)Fragment的生命周期

  在上一篇博文中对Fragment做了简单的介绍,现在再来探讨一下Fragment的生命周期。 一、Fragment的几种状态:   与Activity类...

244100
来自专栏肖蕾的博客

Android网络请求慢的时候,任意位置弹出加载中提示

14850
来自专栏Android先生

项目需求讨论-Android 自定义Dialog实现步骤及封装

在项目中,我们会遇到各种各样的界面需求,比如对话框和选择框,都是会配合具体项目的UI界面来做,而不是说用自带的弹出框。比如下面在登录界面的二个对话框效果。都是我...

35320
来自专栏非著名程序员

Android Material Design系列之RecyclerView和CardView

去年很早之前,我就讲解过RecyclerView的使用,今天我们就在讲解CardView的时候,顺便再把RecyclerView同时讲解一下。RecyclerV...

22480
来自专栏青蛙要fly的专栏

关于Fragment的动态添加的相关疑问及解答

今天在网上看到了一个开源库:Spruce Android Animation Library (and iOS)

8920
来自专栏androidBlog

Android 自定义 MarqueeView 实现跑马灯效果 - 使用说明

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/gdutxiaoxu/article/details/...

43210
来自专栏Sorrower的专栏

界面无小事(一): RecyclerView+CardView了解一下

18630
来自专栏Android中高级开发

Android开发之漫漫长途 XII——Fragment详解

该文章是一个系列文章,是本人在Android开发的漫漫长途上的一点感想和记录,我会尽量按照先易后难的顺序进行编写该系列。该系列引用了《Android开发艺术探索...

9910
来自专栏向治洪

RecyclerView详解

RecyclerView是support-v7包中的新组件,是一个强大的滑动组件,与经典的ListView相比,同样拥有item回收复用的功能,但是直接把vi...

279100
来自专栏Android知识点总结

2-VII-RecyclerView事件

9640

扫码关注云+社区

领取腾讯云代金券