`

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  
上源码吧,差资源,都跑不起来!

相关推荐

    listview行颜色演示+winform分屏切割

    - 使用`TableLayoutPanel`或`SplitContainer`布局控件分割窗口,添加多个`ListView`实例。 通过以上技术,我们可以创建一个功能丰富的监控界面,其中`ListView`行颜色的变化能有效吸引用户的注意力,而分屏切割则...

    UDP数据的接收,并且在Listview中显示出来

    描述中提到“Listview中对数据进行分割”,这可能意味着需要将接收到的单个数据字符串拆分成多个部分。可以使用字符串的分割方法,如Java的`split()`函数,根据特定分隔符将字符串切割成多个子字符串。 ```java ...

    Q1069478 C# 如何通过文件名来搜索bin目录下的txt文件,并按列导入到listview中?

    假设每个txt文件的内容是按照列分隔的,我们可以使用`File`类的`ReadAllLines`方法读取每一行,然后分割成列: ```csharp foreach (FileInfo file in txtFiles) { string[] lines = File.ReadAllLines(file....

    Android入门第六篇之ListView (一).docx

    // 分割数据,假设每一项包含标题和文本,例如 "标题|文本" String[] parts = itemData.split("\\|"); titleView.setText(parts[0]); textView.setText(parts[1]); return itemView; } ``` 至此,你已经完成...

    最经典的pb源码,资源管理器treeview listview

    "splitbar"是指分割条,这是一种用户界面元素,允许用户通过拖动来改变两个区域的大小,例如在两个视图之间进行调整。"并可调整显示模式"意味着这个程序可能提供了自定义视图布局的选项,用户可以根据个人喜好或任务...

    ListView列表项数字/字母/汉字混合排序

    在Android开发中,ListView是一种常用的组件,用于展示可滚动的列表数据。在实际应用中,我们经常遇到需要对ListView中的列表项进行数字、字母和汉字混合排序的需求。这个任务涉及到了字符串比较、自定义排序规则...

    通过TStringList分割字符串

    这里,我们将探讨如何使用`TStringList`类来分割由特定字符(如分号)隔开的字符串,并将结果在`TListView`组件中显示出来。这个过程在Delphi2009及其后续版本中是常见的操作,因为`TStringList`是Delphi标准库中的...

    vc.net分割窗口

    4. **添加子控件**:在SplitContainer的每个Panel中,添加你需要显示的控件,如TextBox、ListView、DataGridView等。 5. **处理Splitter事件**:当用户拖动Splitter时,会触发Splitter的SplitterMoving和...

    C#资源管理器

    SplitContainer是一个容器控件,可以将窗体划分为两部分,通常用于创建水平或垂直分割的区域。 在SplitContainer的左侧,我们添加一个TreeView控件,命名为treeView1。设置其Dock属性为Fill,以便填满Split...

    C#利用winform编写一个简易的文件浏览器程序代码

    SplitContainer允许我们在窗体中创建一个水平分割的区域,左侧用于树形视图,右侧用于文件列表。 2. **菜单和工具栏**:在顶部添加MenuStrip控件来创建菜单项,如“文件”、“编辑”等,这些菜单项可以提供浏览、...

    androdid课程表

    为了解决这一问题,可能需要自定义分割逻辑或使用其他更灵活的方法来处理字符串分割。 ### 六、代码示例 这里提供了一个简单的代码片段,展示了如何在Android客户端中初始化界面元素和相关变量: ```java public ...

    C#控件使用示例_C#_控件编程_

    3. **E20-SplitContainerExample**:`SplitContainer`控件是用于分割界面空间的工具,它可以将一个窗体划分为两个或更多个可调整大小的部分。通过这个示例,你可以了解如何创建分隔条,以及如何在运行时调整各个部分...

    ip检测_批量_ping_C#实现ping功能_

    5. 考虑到用户体验,可以在窗体中添加ListView控件,实时显示每个IP的Ping结果,包括IP、状态和往返时间。 6. 运行程序,用户可以输入或复制多行IP地址,点击按钮后,程序将逐个Ping这些IP,并在窗体中显示结果。 ...

    Android MP3播放器 (简单练习版)

    这涉及到字符串处理,例如使用`String.split()`来分割歌词行,并根据时间标签匹配到对应的歌词内容。 3. **UI设计**: - **ListView**:用于显示歌曲列表,每个条目包含歌曲名、歌手名和歌手头像。`ListView`需要...

    关于C#第三方控件文档

    这些都是常见的Windows Forms控件,`MenuStrip`用于创建菜单栏,`StatusStrip`用于显示状态栏信息,`SplitContainer`允许你将控件区域分割成两部分,`TreeView`用于展示层级结构的数据,`ListView`则用于展示列表...

    linq查询用于寻找文件中单词和句子的实例C#窗口程序

    这里的查询会读取文件中的每一行,分割成单词,然后找到所有以"特定前缀"开头的单词。 方法链是另一种使用LINQ的方式,它通过`.Where()`、`.Select()`等方法连续操作集合。上述查询表达式可以转换为方法链形式: `...

    Android读取Txt文件源码及性能分析

    但是,此方法并未使用ListView展示数据,可能是因为在处理大量数据时,ListView可能会有性能问题,特别是在数据更新频繁时。为了显示单词统计结果,开发者可能选择更合适的视图组件,如RecyclerView,或者直接在日志...

    Outlook风格栏控制(C#)

    4. **TreeView和ListView控件**:在邮件列表区域,开发者可能需要用到TreeView控件来显示文件夹结构,而ListView控件则用于展示邮件列表,包括标题、发件人、接收时间等信息。 5. **数据绑定**:为了动态加载和更新...

    资源(文件)管理器C#版源文件

    当用户在TreeView上点击节点或在SplitContainer上调整分割线时,会触发相应的事件。开发者需要编写事件处理函数,根据事件参数执行相应的操作。 在www.codefnas.net网站上,可能可以找到更多关于此项目的详细信息和...

    winform常用的控件实例

    17. **SplitContainer**:分割容器,可以将控件区域分为两部分,用户可调整两部分的大小。 18. **TabControl**:选项卡控件,允许用户在多个页面之间切换。 每个控件都有其独特的属性、方法和事件,例如Button的...

Global site tag (gtag.js) - Google Analytics