- /**
- * 主界面
- *
- * @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;
- }
- }