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