`

ListView_split 分割

 
阅读更多



 

/**
 * 主界面
 * 
 * @author lilin
 * @date 2011-12-12 下午11:13:20
 * @ClassName: MainView
 */
public class MainView extends Activity {
	// 主界面的ListView
	private ListView mainListView;
	// 浏览部分的Adapter
	private ItemListViewAdp mytoolAdp;
	// 收藏部分的Adapter
	private ItemListViewAdp libraryAdp;

	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		// 隐藏标题栏
		requestWindowFeature(Window.FEATURE_NO_TITLE);
		setContentView(R.layout.mainview);
		initView();
	}

	// 初始化
	private void initView() {
		mainListView = (ListView) findViewById(R.id.HomeListView);
	}

	// 用可点击的项填充主界面上的ListView
	private void fillMainListView() {
		mytoolAdp = new ItemListViewAdp(this);
		libraryAdp = new ItemListViewAdp(this);

		// 声明MainListView的适配器
		SplitListViewAdp mainListViewAdp = new SplitListViewAdp(this);

		mainListViewAdp.addItems("我的收藏", libraryAdp);
		mainListViewAdp.addItems("常用工具", mytoolAdp);
		mainListView.setAdapter(mainListViewAdp);
		// 初始化每一部分的内容
		initItemContent(libraryAdp, mytoolAdp);

		// MainListView的单击事件
		mainListView.setOnItemClickListener(new OnItemClickListener() {
			public void onItemClick(AdapterView<?> adapterView, View view,
					int index, long time) {
				IListViewItemClickListener listener = ((ItemsModel) adapterView
						.getAdapter().getItem(index)).getItemClickListener();
				if (listener != null) {
					listener.itemClick();
				}
			}
		});
	}

	public void initItemContent(ItemListViewAdp item1, ItemListViewAdp item2) {

		/*-----------------------我的工具部分-----------------------------------*/
		ArrayList<ItemsModel> mytoolList = new ArrayList<ItemsModel>();
		// 搜索项:
		// 实现点击该项的事件接口
		IListViewItemClickListener mainListViewClickListener = new IListViewItemClickListener() {
			public void itemClick() {
				ShowMsg.showToast(MainView.this, "点击了搜索");
			}
		};
		// 初始化MainItemModel:需要实现点击接口
		ItemsModel mainItemModel = new ItemsModel(R.drawable.list_search,
				"搜索", mainListViewClickListener);
		mytoolList.add(mainItemModel);

		// 下载项:
		// 只用内存卡存在是才显示下载项
		if (SDCard.hasSDcard()) {
			mytoolList.add(new ItemsModel(R.drawable.list_download, "下载",
					new IListViewItemClickListener() {
						public void itemClick() {
							ShowMsg.showToast(MainView.this, "点击了下载");
						}
					}));
		}

		/*-----------------------我的收藏部分------------------------------------*/
		ArrayList<ItemsModel> libraryList = new ArrayList<ItemsModel>();
		libraryList.add(new ItemsModel(R.drawable.list_playlist, "歌曲列表",
				new IListViewItemClickListener() {
					public void itemClick() {
						// PlaylistView.launch(MainView.this, Mode.Normal);
						ShowMsg.showToast(MainView.this, "歌曲列表");
					}
				}));
		// 热门歌曲项:
		libraryList.add(new ItemsModel(R.drawable.list_top, "热门歌曲",
				new IListViewItemClickListener() {
					public void itemClick() {
						ShowMsg.showToast(MainView.this, "点击了热门歌曲");
					}
				}));
		// 电台项:
		libraryList.add(new ItemsModel(R.drawable.list_radio, "电台",
				new IListViewItemClickListener() {
					public void itemClick() {
						ShowMsg.showToast(MainView.this, "点击了电台");
					}
				}));

		// 获得配置参数:用户名
		final String userName = PreferenceManager.getDefaultSharedPreferences(
				this).getString("user_name", null);
		// 如果用户名不空,添加相册项
		if (userName != null && userName.length() > 0) {
			libraryList.add(new ItemsModel(R.drawable.list_cd, "相册",
					new IListViewItemClickListener() {
						public void itemClick() {
							ShowMsg.showToast(MainView.this, "相册");
						}
					}));
		}
		// 设置收藏部分的内容
		item1.setList(libraryList);
		// 设置我的工具的内容
		item2.setList(mytoolList);
	}

	protected void onResume() {
		fillMainListView();
		super.onResume();
	}
}

 适配器:

主适配器:

/**
 * MainListView的适配器
 * 
 * @author lilin
 * @date 2011-12-24 下午08:05:22
 * @ClassName: SplitListViewAdp
 */
public class SplitListViewAdp extends BaseAdapter {
	// 每一部分
	public final Map<String, Adapter> sections = new LinkedHashMap<String, Adapter>();
	// 每一部分的标题
	public final ArrayAdapter<String> sectiontitle;
	public final static int TYPE_SECTION_HEADER = 0;

	// 构造函数
	public SplitListViewAdp(Context context) {
		sectiontitle = new ArrayAdapter<String>(context,
				R.layout.mainlistview_title);
	}

	// 添加项目
	public void addItems(String itemname, Adapter adapter) {
		this.sectiontitle.add(itemname);
		this.sections.put(itemname, adapter);
	}

	public Object getItem(int position) {
		for (Object section : this.sections.keySet()) {
			Adapter adapter = sections.get(section);
			int size = adapter.getCount() + 1;

			// 检查position是否在当前的section
			if (position == 0)
				return section;
			if (position < size)
				return adapter.getItem(position - 1);

			// 否则跳到下一section
			position -= size;
		}
		return null;
	}

	// 获得部分的数量
	public int getCount() {
		int total = 0;
		for (Adapter adapter : this.sections.values())
			total += adapter.getCount() + 1;
		return total;
	}

	public int getViewTypeCount() {
		// assume that sectiontitle count as one, then total all sections
		int total = 1;
		for (Adapter adapter : this.sections.values())
			total += adapter.getViewTypeCount();
		return total;
	}

	public int getItemViewType(int position) {
		int type = 1;
		for (Object section : this.sections.keySet()) {
			Adapter adapter = sections.get(section);
			int size = adapter.getCount() + 1;

			// check if position inside this section
			if (position == 0)
				return TYPE_SECTION_HEADER;
			if (position < size)
				return type + adapter.getItemViewType(position - 1);

			// otherwise jump into next section
			position -= size;
			type += adapter.getViewTypeCount();
		}
		return -1;
	}

	public boolean areAllItemsSelectable() {
		return false;
	}

	public boolean isEnabled(int position) {
		return (getItemViewType(position) != TYPE_SECTION_HEADER);
	}

	@Override
	public View getView(int position, View convertView, ViewGroup parent) {
		int sectionnum = 0;
		for (Object section : this.sections.keySet()) {
			Adapter adapter = sections.get(section);
			int size = adapter.getCount() + 1;

			// check if position inside this section
			if (position == 0)
				return sectiontitle.getView(sectionnum, convertView, parent);
			if (position < size)
				return adapter.getView(position - 1, convertView, parent);

			// otherwise jump into next section
			position -= size;
			sectionnum++;
		}
		return null;
	}

	@Override
	public long getItemId(int position) {
		return position;
	}

}

 

部分适配器:继承了基础适配器

/**
 * MainListView的每一项的适配器
 * 
 * @author lilin
 * @date 2011-12-24 下午08:48:43
 * @ClassName: SectionListViewAdp
 */
public class ItemListViewAdp
// 继承了BaseListViewAdp
		extends BaseListViewAdp<ItemsModel> {

	public ItemListViewAdp(Activity context) {
		super(context);
	}

	@Override
	public View getView(int position, View convertView, ViewGroup parent) {
		ViewHolder holder;
		if (convertView == null) {
			LayoutInflater inflater = mActivity.getLayoutInflater();
			convertView = inflater.inflate(R.layout.mainlistview_item, null);

			holder = new ViewHolder();
			holder.myimageview = (ImageView) convertView
					.findViewById(R.id.item_myimageview);
			holder.item_content = (TextView) convertView
					.findViewById(R.id.item_content);

			convertView.setTag(holder);
		} else {
			holder = (ViewHolder) convertView.getTag();
		}
		// 设置item_content
		if (mArrayList.get(position).getContent() != null) {
			// 设置Text
			holder.item_content.setText(mArrayList.get(position).getContent());
		}

		// 设置myimageview
		if (mArrayList.get(position).getImgID() != null) {
			// 有:就设置图片
			holder.myimageview.setImageResource(mArrayList.get(position).getImgID());
		} else {
			// 没有:就设置不可见
			holder.myimageview.setVisibility(View.GONE);
		}

		return convertView;
	}

	static class ViewHolder {
		ImageView myimageview;
		TextView item_content;
	}

}

 

基础适配器:

package com.lilin.splitlistview.adapter;

import java.util.ArrayList;

import android.app.Activity;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ListView;

public abstract class BaseListViewAdp<T> extends BaseAdapter {

	protected ArrayList<T> mArrayList;
	protected Activity mActivity;
	protected ListView mListView;

	// 构造方法
	public BaseListViewAdp(Activity mActivity) {
		this.mActivity = mActivity;
	}

	@Override
	public int getCount() {
		if (mArrayList != null)
			return mArrayList.size();
		else
			return 0;
	}

	@Override
	public Object getItem(int position) {
		return mArrayList == null ? null : mArrayList.get(position);
	}

	@Override
	public long getItemId(int position) {
		return position;
	}

	@Override
	abstract public View getView(int position, View convertView,
			ViewGroup parent);

	public void setList(ArrayList<T> list) {
		this.mArrayList = list;
		notifyDataSetChanged();
	}

	public ArrayList<T> getList() {
		return mArrayList;
	}

	public void setList(T[] list) {
		ArrayList<T> arrayList = new ArrayList<T>(list.length);
		for (T t : list) {
			arrayList.add(t);
		}
		setList(arrayList);
	}

	public ListView getListView() {
		return mListView;
	}

	public void setListView(ListView listView) {
		mListView = listView;
	}

}

 接口和Modal

package com.lilin.splitlistview.Interface;

/**
 * ListView每一项单击事件的接口
 * 
 * @author lilin
 * @date 2011-12-24 下午08:51:08
 * @ClassName: IMainListViewClickListener
 */
public interface IListViewItemClickListener {
	public void itemClick();
}

 

package com.lilin.splitlistview.modal;

import com.lilin.splitlistview.Interface.IListViewItemClickListener;

/**
 * 封装了主界面上ListView每一项的数据
 * 
 * @author lilin
 * @date 2011-12-24 下午06:49:33
 * @ClassName: MainModel
 */
public class ItemsModel {
	// 图片
	private Integer imgID;
	// 内容
	private String content;
	// ID
	private String itemID;
	// 单击事件接口
	private IListViewItemClickListener itemClickListener;

	// 构造方法
	public ItemsModel(Integer imgID, String content,
			IListViewItemClickListener iMainItemClickListener) {
		this.imgID = imgID;
		this.content = content;
		itemClickListener = iMainItemClickListener;
	}

	public Integer getImgID() {
		return imgID;
	}

	public void setImgID(Integer imgID) {
		this.imgID = imgID;
	}

	public String getContent() {
		return content;
	}

	public void setContent(String content) {
		this.content = content;
	}

	public String getItemID() {
		return itemID;
	}

	public void setItemID(String itemID) {
		this.itemID = itemID;
	}

	public IListViewItemClickListener getItemClickListener() {
		return itemClickListener;
	}

	public void setItemClickListener(
			IListViewItemClickListener itemClickListener) {
		this.itemClickListener = itemClickListener;
	}

}

 

  • 大小: 53.9 KB
分享到:
评论
1 楼 航空母舰 2014-07-24  
上源码吧,差资源,都跑不起来!

相关推荐

    C 语言实现 linux pwd 命令内含源码以及说明书可以自己运行复现.zip

    C 语言实现 linux pwd 命令内含源码以及说明书可以自己运行复现.zip

    2024年中国变焦LED手电筒行业研究报告.docx

    2024年中国变焦LED手电筒行业研究报告

    node-v8.11.2-darwin-x64.tar.xz

    Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。

    node-v4.8.2-x86.msi

    Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。

    ffmpeg 结合 SDL 编写播放器内含源码以及说明书可以自己运行复现.zip

    ffmpeg 结合 SDL 编写播放器内含源码以及说明书可以自己运行复现.zip

    2024-2030中国OPzV胶体电池市场现状研究分析与发展前景预测报告.docx

    2024-2030中国OPzV胶体电池市场现状研究分析与发展前景预测报告

    node-v4.9.0-win-x64.zip

    Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。

    2024年中国齿轮离心鼓风机行业研究报告.docx

    2024年中国齿轮离心鼓风机行业研究报告

    python教程-03-标签属性的获取和设置.ev4.rar

    python教程-03-标签属性的获取和设置.ev4.rar

    狂雨小说CMS-多功能小说系统

    安装说明 系统要求 PHP要求5.6版本以上,低于5.6版本无法运行 支持php7 addons,application,config,extend,public,runtime,template,uploads 目录必须要有写入权限 777 网站必须配置好伪静态(.htaccess为Apache伪静态配置文件,kyxscms.conf为Nginx伪静态配置文件) 宝塔面板要在 软件 php 设置里安装扩展 fileinfo

    基于java的高校毕业设计选题管理系统论文.docx

    基于java的高校毕业设计选题管理系统论文

    信创微服务平台建设指南(PDF)

    当前,以微服务、DevOps、容器、多云业务管理为代表的云原生技术已经广泛成熟应用,成为加速企业数字化业务高效创新、实现企业数字化转型的最佳技术支撑。而信创支持、国产化支持,是中国企业数字化转型不得不满足的基本要求。更有专家指出,在关乎企业生存的必选项“数字化转型”以及国家信创战略的共同冲击下,企业需要改变现有业务和IT的架构,更快速地应对挑战、响应变化,增强自身的竞争力。 信创微服务平台建设指南应当综合考虑当前的技术发展趋势、企业及用户的需求,以及平台的可持续发展能力。 《信创微服务平台建设指南》可参考文章:https://mp.weixin.qq.com/s/cfJH72JFxDTHCPsfFWMUqA

    node-v8.14.0-linux-ppc64le.tar.xz

    Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。

    Python爬虫.pdf

    上文提供了一个基础的Python爬虫示例,旨在从CSDN(一个知名的技术博客平台)上爬取特定文章的内容。这个示例代码展示了使用requests库发送HTTP请求,以及使用BeautifulSoup库解析HTML内容的基本流程。 步骤详解 导入必要的库: requests库用于发送HTTP请求。 BeautifulSoup库用于解析HTML内容。 time库用于控制请求之间的延迟。 设置目标URL和请求头: 目标URL是想要爬取的CSDN文章的URL,这里用占位符'https://blog.csdn.net/some_user/article/details/some_article_id'表示,实际使用时需要替换为真实的URL。 请求头(headers)通常用于模拟浏览器行为,避免被目标网站识别为爬虫。这里设置了User-Agent字段。 发送请求并获取响应内容: 使用requests.get()方法发送GET请求到目标URL,并传入请求头。 使用response.raise_for_status()方法检查请求是否成功。如果响应状态码不是200(成功),则抛出异常。 解析HTML内

    node-v8.2.0-linux-ppc64le.tar.xz

    Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。

    毕业设计写作技巧.pdf

    说明: 上文提供了一份关于毕业设计论文写作技巧的总结,旨在帮助学生在完成这一重要学术任务时更加系统、高效地进行。以下是对这份总结的详细说明: 一、目的与重要性 毕业设计论文不仅是学生学术生涯中的一个重要里程碑,也是检验学生综合运用所学知识、独立研究和解决问题能力的重要标准。因此,掌握一定的写作技巧对于顺利完成论文写作至关重要。 二、写作技巧总结 明确研究主题和目标: 学生首先需要确定自己的研究领域和研究方向,确保研究的主题具有实际意义和研究价值。 明确研究目标有助于学生在整个研究过程中保持清晰的方向,确保研究的深入和全面。 充分收集和整理资料: 学生需要通过广泛阅读相关领域的文献,了解研究现状和发展趋势,为论文写作提供充分的理论支撑。 对收集到的资料进行整理和分类,有助于提取有用信息,为论文写作提供有力的论据和支撑。 撰写论文大纲: 论文大纲是论文写作的蓝图,它有助于学生清晰地规划论文的结构和内容。 通过制定合理的大纲,学生可以在写作过程中保持逻辑严密、条理清晰。 论文写作注意事项: 引言部分需要简要介绍研究背景、意义、目的和范围,引起读者的兴趣。 正文部分需要详细阐述研究方

    node-v9.6.1-darwin-x64.tar.xz

    Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。

    单片机开发资源:基于51单片机的开发程序

    单片机开发资源,基于51单片机的开发程序,供学习参考。

Global site tag (gtag.js) - Google Analytics