162.n1-左侧边栏数据的初始化

ViewPager和左侧边栏数据的交互,然后通过lIstView实现左侧边栏,下面主要是实现获取到ViewPager的数据,然后监听左边菜单的点击事件,实现对左边的监听


去掉listView的分割线android:dividerHeight="0dp"

fragment_left_menu.xml左侧边栏的ListView布局

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="#000000"
    android:orientation="vertical" >
    
	<!-- 侧边栏 -->
	<ListView 
	    android:id="@+id/lv_list"
	   	android:layout_marginTop="40dp"
	    android:layout_width="match_parent"
	    android:dividerHeight="0dp"
    	android:layout_height="wrap_content"
    	android:listSelector="@null"
	    />
</LinearLayout>

lsit_menu_item.xml单个条目

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:padding="5dp"
    android:orientation="vertical" >
    
	<!-- 左侧菜单单个条目的布局 -->
	<TextView 
	    android:id="@+id/tv_title"
	    android:layout_width="wrap_content"
    	android:layout_height="wrap_content"
    	android:textColor="@drawable/menu_text_selector"
    	android:textSize="22sp"
    	android:text="新闻"
    	android:layout_gravity="center"
    	android:enabled="false"
    	android:drawablePadding="5dp"
    	android:drawableLeft="@drawable/menu_listview_selector"
	    />
</LinearLayout>

menu_listview_selectorxml左侧的箭头的选择器,点击的时候显示不同的图片由于是listView因此使用state_enabled

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android" >
    <!-- 左侧menu条目的点击 -->
    <!-- 点击的时候是红色,listView的条目是使用enbale,来设置selector能否使用 -->
	<item android:state_enabled="true" android:drawable="@drawable/menu_arr_select"/>
	<!-- 常规状态字体是白色 -->
	<item android:drawable="@drawable/menu_arr_normal"/>
</selector>

menu_text_selector.xml左侧文本颜色的选择器,点击的时候显示不同的颜色由于是listView因此使用state_enabled

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android" >
    <!-- 左侧menu条目的点击 -->
    <!-- 点击的时候是红色,listView的条目是使用enbale,来设置selector能否使用 -->
	<item android:state_enabled="true" android:color="#ff0000"/>
	<!-- 常规状态字体是白色 -->
	<item android:color="@android:color/white"/>
</selector>

NewsCenterPager.java主要是传递数据

package com.ldw.news.base.impl;

import android.app.Activity;
import android.graphics.Color;
import android.view.Gravity;
import android.view.View;
import android.widget.TextView;
import android.widget.Toast;

import com.google.gson.Gson;
import com.ldw.news.MainActivity;
import com.ldw.news.base.BasePager;
import com.ldw.news.domain.NewsData;
import com.ldw.news.fragment.LeftMenuFragment;
import com.ldw.news.global.ClobalContants;
import com.lidroid.xutils.HttpUtils;
import com.lidroid.xutils.exception.HttpException;
import com.lidroid.xutils.http.ResponseInfo;
import com.lidroid.xutils.http.callback.RequestCallBack;
import com.lidroid.xutils.http.client.HttpRequest.HttpMethod;

/**
 * 新闻中心
 * 
 * @author Kevin
 * 
 */
public class NewsCenterPager extends BasePager {

	//private ArrayList<BaseMenuDetailPager> mPagers;// 4个菜单详情页的集合
	private NewsData mNewsData;
	
	public NewsCenterPager(Activity activity) {
		super(activity);
	}

	@Override
	public void initData() {
		System.out.println("初始化设置数据....");
		
		tvTitle.setText("设置");
		//btnMenu.setVisibility(View.GONE);// 隐藏菜单按钮
		setSlidingMenuEnable(true);// 关闭侧边栏

		TextView text = new TextView(mActivity);
		text.setText("设置");
		text.setTextColor(Color.RED);
		text.setTextSize(25);
		text.setGravity(Gravity.CENTER);

		// 向FrameLayout中动态添加布局
		flContent.addView(text);
		//从服务器中获取数据
		getDataFromServer();
	}
	
	/*
	 * 从服务器中获取数据,使用xUtils实现
	 */
	private void getDataFromServer(){
		HttpUtils utils = new HttpUtils();
		//参数是String获取到的是String
		utils.send(HttpMethod.GET, ClobalContants.CATEGORIES_URL, new RequestCallBack<String>(){

			@Override
			public void onSuccess(ResponseInfo<String> responseInfo) {
				//获取到返回的结果
				String result = (String) responseInfo.result;
				System.out.println("返回结果:" + result);

				parseData(result);
				
			}

			//访问失败
			@Override
			public void onFailure(HttpException error, String msg) {
				Toast.makeText(mActivity, msg, Toast.LENGTH_SHORT)
				.show();
				//打印错误信息
				error.printStackTrace();
				
			}
			
		});
	}
	
	/*
	 * 解析网络数据
	 */
	protected void parseData(String result) {
		//使用Gson解析
		Gson gson = new Gson();
		//第一个参数是数据,第二个参数是要转化成什么对象
		mNewsData = gson.fromJson(result, NewsData.class);
		System.out.println("解析结果:" + mNewsData);
		
		// 刷新测边栏的数据,利用MainActivity获取到左侧边栏的数据
		MainActivity mainUi = (MainActivity) mActivity;
		//获取到左侧边栏的对象
		LeftMenuFragment leftMenuFragment = mainUi.getLeftMenuFragment();
		//设置网络数据
		leftMenuFragment.setMenuData(mNewsData);
	}

}

LeftMenuFragement.java左侧边栏的逻辑代码

package com.ldw.news.fragment;

import java.util.ArrayList;

import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.BaseAdapter;
import android.widget.ListView;
import android.widget.TextView;

import com.ldw.news.R;
import com.ldw.news.domain.NewsData;
import com.ldw.news.domain.NewsData.NewsMenuData;
import com.lidroid.xutils.ViewUtils;
import com.lidroid.xutils.view.annotation.ViewInject;

/*
 * 左侧边栏的内容
 */
public class LeftMenuFragment extends BaseFragment{
	@ViewInject(R.id.lv_list)
	private ListView lv_list;
	private ArrayList<NewsMenuData> mMenuList;
	private MenuAdapter mAdapter;
	private int mCurrentPosition;//当前被点击的菜单栏目
	//初始化布局
	@Override
	public View initViews() {
		View view = View.inflate(mActivity, R.layout.fragment_left_menu, null);
		ViewUtils.inject(this, view);
		return view;
	}
	
	public void initData(){
		
		lv_list.setOnItemClickListener(new OnItemClickListener(){

			@Override
			public void onItemClick(AdapterView<?> parent, View view,
					int position, long id) {
				mCurrentPosition = position;
				//更新getItem获取的
				mAdapter.notifyDataSetChanged();
			}
			
		});
	}
	
	//设置网络数据
	public void setMenuData(NewsData data){
		System.out.println("左侧的数据是:" + data);
		mMenuList = data.data;
		mAdapter = new MenuAdapter();
		lv_list.setAdapter(mAdapter);
	}
	
	class MenuAdapter extends BaseAdapter{

		@Override
		public int getCount() {
			// TODO Auto-generated method stub
			return mMenuList.size();
		}

		@Override
		public Object getItem(int position) {
			// TODO Auto-generated method stub
			return mMenuList.get(position);
		}

		@Override
		public long getItemId(int position) {
			// TODO Auto-generated method stub
			return position;
		}

		@Override
		public View getView(int position, View convertView, ViewGroup parent) {
			View view = View.inflate(mActivity, R.layout.list_menu_item, null);
			TextView tv_title = (TextView)view.findViewById(R.id.tv_title);	
			//获取到对应位置的data4组中的数据
			NewsMenuData newsMenuData = (NewsMenuData) getItem(position);
			
			tv_title.setText(newsMenuData.title);
			
			//判断点击的mCurrentPosition是不是tPosition一致,也就是被选中
			if(mCurrentPosition == position){
				// 显示红色,让listView的selector生效,state_enabled的时候是红色
				tv_title.setEnabled(true);
			} else {
				// 显示白色
				tv_title.setEnabled(false);
			}
			return view;
		}
		
	}

}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值