zoukankan      html  css  js  c++  java
  • 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. }  

     

  • 相关阅读:
    Block的强强引用问题(循环引用)
    自己封装的下载方法
    MJRefresh上拉刷新下拉加载
    JavaScript 模块的循环加载
    webpack使用require注意事项
    console.log高级用法
    path.resolve()和path.join()的区别
    深入理解react
    react children技巧总结
    揭秘css
  • 原文地址:https://www.cnblogs.com/firecode/p/2633507.html
Copyright © 2011-2022 走看看