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

本文介绍如何使用ViewPager与左侧边栏进行数据交互,并通过ListView实现左侧边栏。主要内容包括去除ListView分割线、定义列表项布局及选择器样式,以及通过NewsCenterPager类和LeftMenuFragment实现数据获取与展示。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

}


基于Spring Boot搭建的一个多功能在线学习系统的实现细节。系统分为管理员和用户两个主要模块。管理员负责视频、文件和文章资料的管理以及系统运营维护;用户则可以进行视频播放、资料下载、参与学习论坛并享受个性化学习服务。文中重点探讨了文件下载的安全性和性能优化(如使用Resource对象避免内存溢出),积分排行榜的高效实现(采用Redis Sorted Set结构),敏感词过滤机制(利用DFA算法构建内存过滤树)以及视频播放的浏览器兼容性解决方案(通过FFmpeg调整MOOV原子位置)。此外,还提到了权限管理方面自定义动态加载器的应用,提高了系统的灵活性和易用性。 适合人群:对Spring Boot有一定了解,希望深入理解其实际应用的技术人员,尤其是从事在线教育平台开发的相关从业者。 使用场景及目标:适用于需要快速搭建稳定高效的在线学习平台的企业或团队。目标在于提供一套完整的解决方案,涵盖从资源管理到用户体验优化等多个方面,帮助开发者更好地理解和掌握Spring Boot框架的实际运用技巧。 其他说明:文中不仅提供了具体的代码示例和技术思路,还分享了许多实践经验教训,对于提高项目质量有着重要的指导意义。同时强调了安全性、性能优化等方面的重要性,确保系统能够应对大规模用户的并发访问需求。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值