ListView_split 分割

  

Java代码  收藏代码
  1. /** 
  2.  * 主界面 
  3.  *  
  4.  * @author lilin 
  5.  * @date 2011-12-12 下午11:13:20 
  6.  * @ClassName: MainView 
  7.  */  
  8. public class MainView extends Activity {  
  9.     // 主界面的ListView  
  10.     private ListView mainListView;  
  11.     // 浏览部分的Adapter  
  12.     private ItemListViewAdp mytoolAdp;  
  13.     // 收藏部分的Adapter  
  14.     private ItemListViewAdp libraryAdp;  
  15.   
  16.     public void onCreate(Bundle savedInstanceState) {  
  17.         super.onCreate(savedInstanceState);  
  18.         // 隐藏标题栏  
  19.         requestWindowFeature(Window.FEATURE_NO_TITLE);  
  20.         setContentView(R.layout.mainview);  
  21.         initView();  
  22.     }  
  23.   
  24.     // 初始化  
  25.     private void initView() {  
  26.         mainListView = (ListView) findViewById(R.id.HomeListView);  
  27.     }  
  28.   
  29.     // 用可点击的项填充主界面上的ListView  
  30.     private void fillMainListView() {  
  31.         mytoolAdp = new ItemListViewAdp(this);  
  32.         libraryAdp = new ItemListViewAdp(this);  
  33.   
  34.         // 声明MainListView的适配器  
  35.         SplitListViewAdp mainListViewAdp = new SplitListViewAdp(this);  
  36.   
  37.         mainListViewAdp.addItems("我的收藏", libraryAdp);  
  38.         mainListViewAdp.addItems("常用工具", mytoolAdp);  
  39.         mainListView.setAdapter(mainListViewAdp);  
  40.         // 初始化每一部分的内容  
  41.         initItemContent(libraryAdp, mytoolAdp);  
  42.   
  43.         // MainListView的单击事件  
  44.         mainListView.setOnItemClickListener(new OnItemClickListener() {  
  45.             public void onItemClick(AdapterView<?> adapterView, View view,  
  46.                     int index, long time) {  
  47.                 IListViewItemClickListener listener = ((ItemsModel) adapterView  
  48.                         .getAdapter().getItem(index)).getItemClickListener();  
  49.                 if (listener != null) {  
  50.                     listener.itemClick();  
  51.                 }  
  52.             }  
  53.         });  
  54.     }  
  55.   
  56.     public void initItemContent(ItemListViewAdp item1, ItemListViewAdp item2) {  
  57.   
  58.         /*-----------------------我的工具部分-----------------------------------*/  
  59.         ArrayList<ItemsModel> mytoolList = new ArrayList<ItemsModel>();  
  60.         // 搜索项:  
  61.         // 实现点击该项的事件接口  
  62.         IListViewItemClickListener mainListViewClickListener = new IListViewItemClickListener() {  
  63.             public void itemClick() {  
  64.                 ShowMsg.showToast(MainView.this"点击了搜索");  
  65.             }  
  66.         };  
  67.         // 初始化MainItemModel:需要实现点击接口  
  68.         ItemsModel mainItemModel = new ItemsModel(R.drawable.list_search,  
  69.                 "搜索", mainListViewClickListener);  
  70.         mytoolList.add(mainItemModel);  
  71.   
  72.         // 下载项:  
  73.         // 只用内存卡存在是才显示下载项  
  74.         if (SDCard.hasSDcard()) {  
  75.             mytoolList.add(new ItemsModel(R.drawable.list_download, "下载",  
  76.                     new IListViewItemClickListener() {  
  77.                         public void itemClick() {  
  78.                             ShowMsg.showToast(MainView.this"点击了下载");  
  79.                         }  
  80.                     }));  
  81.         }  
  82.   
  83.         /*-----------------------我的收藏部分------------------------------------*/  
  84.         ArrayList<ItemsModel> libraryList = new ArrayList<ItemsModel>();  
  85.         libraryList.add(new ItemsModel(R.drawable.list_playlist, "歌曲列表",  
  86.                 new IListViewItemClickListener() {  
  87.                     public void itemClick() {  
  88.                         // PlaylistView.launch(MainView.this, Mode.Normal);  
  89.                         ShowMsg.showToast(MainView.this"歌曲列表");  
  90.                     }  
  91.                 }));  
  92.         // 热门歌曲项:  
  93.         libraryList.add(new ItemsModel(R.drawable.list_top, "热门歌曲",  
  94.                 new IListViewItemClickListener() {  
  95.                     public void itemClick() {  
  96.                         ShowMsg.showToast(MainView.this"点击了热门歌曲");  
  97.                     }  
  98.                 }));  
  99.         // 电台项:  
  100.         libraryList.add(new ItemsModel(R.drawable.list_radio, "电台",  
  101.                 new IListViewItemClickListener() {  
  102.                     public void itemClick() {  
  103.                         ShowMsg.showToast(MainView.this"点击了电台");  
  104.                     }  
  105.                 }));  
  106.   
  107.         // 获得配置参数:用户名  
  108.         final String userName = PreferenceManager.getDefaultSharedPreferences(  
  109.                 this).getString("user_name"null);  
  110.         // 如果用户名不空,添加相册项  
  111.         if (userName != null && userName.length() > 0) {  
  112.             libraryList.add(new ItemsModel(R.drawable.list_cd, "相册",  
  113.                     new IListViewItemClickListener() {  
  114.                         public void itemClick() {  
  115.                             ShowMsg.showToast(MainView.this"相册");  
  116.                         }  
  117.                     }));  
  118.         }  
  119.         // 设置收藏部分的内容  
  120.         item1.setList(libraryList);  
  121.         // 设置我的工具的内容  
  122.         item2.setList(mytoolList);  
  123.     }  
  124.   
  125.     protected void onResume() {  
  126.         fillMainListView();  
  127.         super.onResume();  
  128.     }  
  129. }  

 适配器:

主适配器:

Java代码  收藏代码
  1. /** 
  2.  * MainListView的适配器 
  3.  *  
  4.  * @author lilin 
  5.  * @date 2011-12-24 下午08:05:22 
  6.  * @ClassName: SplitListViewAdp 
  7.  */  
  8. public class SplitListViewAdp extends BaseAdapter {  
  9.     // 每一部分  
  10.     public final Map<String, Adapter> sections = new LinkedHashMap<String, Adapter>();  
  11.     // 每一部分的标题  
  12.     public final ArrayAdapter<String> sectiontitle;  
  13.     public final static int TYPE_SECTION_HEADER = 0;  
  14.   
  15.     // 构造函数  
  16.     public SplitListViewAdp(Context context) {  
  17.         sectiontitle = new ArrayAdapter<String>(context,  
  18.                 R.layout.mainlistview_title);  
  19.     }  
  20.   
  21.     // 添加项目  
  22.     public void addItems(String itemname, Adapter adapter) {  
  23.         this.sectiontitle.add(itemname);  
  24.         this.sections.put(itemname, adapter);  
  25.     }  
  26.   
  27.     public Object getItem(int position) {  
  28.         for (Object section : this.sections.keySet()) {  
  29.             Adapter adapter = sections.get(section);  
  30.             int size = adapter.getCount() + 1;  
  31.   
  32.             // 检查position是否在当前的section  
  33.             if (position == 0)  
  34.                 return section;  
  35.             if (position < size)  
  36.                 return adapter.getItem(position - 1);  
  37.   
  38.             // 否则跳到下一section  
  39.             position -= size;  
  40.         }  
  41.         return null;  
  42.     }  
  43.   
  44.     // 获得部分的数量  
  45.     public int getCount() {  
  46.         int total = 0;  
  47.         for (Adapter adapter : this.sections.values())  
  48.             total += adapter.getCount() + 1;  
  49.         return total;  
  50.     }  
  51.   
  52.     public int getViewTypeCount() {  
  53.         // assume that sectiontitle count as one, then total all sections  
  54.         int total = 1;  
  55.         for (Adapter adapter : this.sections.values())  
  56.             total += adapter.getViewTypeCount();  
  57.         return total;  
  58.     }  
  59.   
  60.     public int getItemViewType(int position) {  
  61.         int type = 1;  
  62.         for (Object section : this.sections.keySet()) {  
  63.             Adapter adapter = sections.get(section);  
  64.             int size = adapter.getCount() + 1;  
  65.   
  66.             // check if position inside this section  
  67.             if (position == 0)  
  68.                 return TYPE_SECTION_HEADER;  
  69.             if (position < size)  
  70.                 return type + adapter.getItemViewType(position - 1);  
  71.   
  72.             // otherwise jump into next section  
  73.             position -= size;  
  74.             type += adapter.getViewTypeCount();  
  75.         }  
  76.         return -1;  
  77.     }  
  78.   
  79.     public boolean areAllItemsSelectable() {  
  80.         return false;  
  81.     }  
  82.   
  83.     public boolean isEnabled(int position) {  
  84.         return (getItemViewType(position) != TYPE_SECTION_HEADER);  
  85.     }  
  86.   
  87.     @Override  
  88.     public View getView(int position, View convertView, ViewGroup parent) {  
  89.         int sectionnum = 0;  
  90.         for (Object section : this.sections.keySet()) {  
  91.             Adapter adapter = sections.get(section);  
  92.             int size = adapter.getCount() + 1;  
  93.   
  94.             // check if position inside this section  
  95.             if (position == 0)  
  96.                 return sectiontitle.getView(sectionnum, convertView, parent);  
  97.             if (position < size)  
  98.                 return adapter.getView(position - 1, convertView, parent);  
  99.   
  100.             // otherwise jump into next section  
  101.             position -= size;  
  102.             sectionnum++;  
  103.         }  
  104.         return null;  
  105.     }  
  106.   
  107.     @Override  
  108.     public long getItemId(int position) {  
  109.         return position;  
  110.     }  
  111.   
  112. }  

 

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

Java代码  收藏代码
  1. /** 
  2.  * MainListView的每一项的适配器 
  3.  *  
  4.  * @author lilin 
  5.  * @date 2011-12-24 下午08:48:43 
  6.  * @ClassName: SectionListViewAdp 
  7.  */  
  8. public class ItemListViewAdp  
  9. // 继承了BaseListViewAdp  
  10.         extends BaseListViewAdp<ItemsModel> {  
  11.   
  12.     public ItemListViewAdp(Activity context) {  
  13.         super(context);  
  14.     }  
  15.   
  16.     @Override  
  17.     public View getView(int position, View convertView, ViewGroup parent) {  
  18.         ViewHolder holder;  
  19.         if (convertView == null) {  
  20.             LayoutInflater inflater = mActivity.getLayoutInflater();  
  21.             convertView = inflater.inflate(R.layout.mainlistview_item, null);  
  22.   
  23.             holder = new ViewHolder();  
  24.             holder.myimageview = (ImageView) convertView  
  25.                     .findViewById(R.id.item_myimageview);  
  26.             holder.item_content = (TextView) convertView  
  27.                     .findViewById(R.id.item_content);  
  28.   
  29.             convertView.setTag(holder);  
  30.         } else {  
  31.             holder = (ViewHolder) convertView.getTag();  
  32.         }  
  33.         // 设置item_content  
  34.         if (mArrayList.get(position).getContent() != null) {  
  35.             // 设置Text  
  36.             holder.item_content.setText(mArrayList.get(position).getContent());  
  37.         }  
  38.   
  39.         // 设置myimageview  
  40.         if (mArrayList.get(position).getImgID() != null) {  
  41.             // 有:就设置图片  
  42.             holder.myimageview.setImageResource(mArrayList.get(position).getImgID());  
  43.         } else {  
  44.             // 没有:就设置不可见  
  45.             holder.myimageview.setVisibility(View.GONE);  
  46.         }  
  47.   
  48.         return convertView;  
  49.     }  
  50.   
  51.     static class ViewHolder {  
  52.         ImageView myimageview;  
  53.         TextView item_content;  
  54.     }  
  55.   
  56. }  

 

基础适配器:

Java代码  收藏代码
  1. package com.lilin.splitlistview.adapter;  
  2.   
  3. import java.util.ArrayList;  
  4.   
  5. import android.app.Activity;  
  6. import android.view.View;  
  7. import android.view.ViewGroup;  
  8. import android.widget.BaseAdapter;  
  9. import android.widget.ListView;  
  10.   
  11. public abstract class BaseListViewAdp<T> extends BaseAdapter {  
  12.   
  13.     protected ArrayList<T> mArrayList;  
  14.     protected Activity mActivity;  
  15.     protected ListView mListView;  
  16.   
  17.     // 构造方法  
  18.     public BaseListViewAdp(Activity mActivity) {  
  19.         this.mActivity = mActivity;  
  20.     }  
  21.   
  22.     @Override  
  23.     public int getCount() {  
  24.         if (mArrayList != null)  
  25.             return mArrayList.size();  
  26.         else  
  27.             return 0;  
  28.     }  
  29.   
  30.     @Override  
  31.     public Object getItem(int position) {  
  32.         return mArrayList == null ? null : mArrayList.get(position);  
  33.     }  
  34.   
  35.     @Override  
  36.     public long getItemId(int position) {  
  37.         return position;  
  38.     }  
  39.   
  40.     @Override  
  41.     abstract public View getView(int position, View convertView,  
  42.             ViewGroup parent);  
  43.   
  44.     public void setList(ArrayList<T> list) {  
  45.         this.mArrayList = list;  
  46.         notifyDataSetChanged();  
  47.     }  
  48.   
  49.     public ArrayList<T> getList() {  
  50.         return mArrayList;  
  51.     }  
  52.   
  53.     public void setList(T[] list) {  
  54.         ArrayList<T> arrayList = new ArrayList<T>(list.length);  
  55.         for (T t : list) {  
  56.             arrayList.add(t);  
  57.         }  
  58.         setList(arrayList);  
  59.     }  
  60.   
  61.     public ListView getListView() {  
  62.         return mListView;  
  63.     }  
  64.   
  65.     public void setListView(ListView listView) {  
  66.         mListView = listView;  
  67.     }  
  68.   
  69. }  

 接口和Modal

Java代码  收藏代码
  1. package com.lilin.splitlistview.Interface;  
  2.   
  3. /** 
  4.  * ListView每一项单击事件的接口 
  5.  *  
  6.  * @author lilin 
  7.  * @date 2011-12-24 下午08:51:08 
  8.  * @ClassName: IMainListViewClickListener 
  9.  */  
  10. public interface IListViewItemClickListener {  
  11.     public void itemClick();  
  12. }  

 

Java代码  收藏代码
  1. package com.lilin.splitlistview.modal;  
  2.   
  3. import com.lilin.splitlistview.Interface.IListViewItemClickListener;  
  4.   
  5. /** 
  6.  * 封装了主界面上ListView每一项的数据 
  7.  *  
  8.  * @author lilin 
  9.  * @date 2011-12-24 下午06:49:33 
  10.  * @ClassName: MainModel 
  11.  */  
  12. public class ItemsModel {  
  13.     // 图片  
  14.     private Integer imgID;  
  15.     // 内容  
  16.     private String content;  
  17.     // ID  
  18.     private String itemID;  
  19.     // 单击事件接口  
  20.     private IListViewItemClickListener itemClickListener;  
  21.   
  22.     // 构造方法  
  23.     public ItemsModel(Integer imgID, String content,  
  24.             IListViewItemClickListener iMainItemClickListener) {  
  25.         this.imgID = imgID;  
  26.         this.content = content;  
  27.         itemClickListener = iMainItemClickListener;  
  28.     }  
  29.   
  30.     public Integer getImgID() {  
  31.         return imgID;  
  32.     }  
  33.   
  34.     public void setImgID(Integer imgID) {  
  35.         this.imgID = imgID;  
  36.     }  
  37.   
  38.     public String getContent() {  
  39.         return content;  
  40.     }  
  41.   
  42.     public void setContent(String content) {  
  43.         this.content = content;  
  44.     }  
  45.   
  46.     public String getItemID() {  
  47.         return itemID;  
  48.     }  
  49.   
  50.     public void setItemID(String itemID) {  
  51.         this.itemID = itemID;  
  52.     }  
  53.   
  54.     public IListViewItemClickListener getItemClickListener() {  
  55.         return itemClickListener;  
  56.     }  
  57.   
  58.     public void setItemClickListener(  
  59.             IListViewItemClickListener itemClickListener) {  
  60.         this.itemClickListener = itemClickListener;  
  61.     }  
  62.   
  63. }  

 

原文地址:https://www.cnblogs.com/firecode/p/2633507.html