读书人

ListView_split 瓜分

发布时间: 2012-09-25 09:55:59 作者: rapoo

ListView_split 分割


ListView_split 瓜分
?

/** * 主界面 *  * @author lilin * @date 2011-12-12 下午11:13:20 * @ClassName: MainView */public class MainView extends Activity {// 主界面的ListViewprivate ListView mainListView;// 浏览部分的Adapterprivate ItemListViewAdp mytoolAdp;// 收藏部分的Adapterprivate 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);}// 用可点击的项填充主界面上的ListViewprivate 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是否在当前的sectionif (position == 0)return section;if (position < size)return adapter.getItem(position - 1);// 否则跳到下一sectionposition -= 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 sectionsint 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 sectionif (position == 0)return TYPE_SECTION_HEADER;if (position < size)return type + adapter.getItemViewType(position - 1);// otherwise jump into next sectionposition -= size;type += adapter.getViewTypeCount();}return -1;}public boolean areAllItemsSelectable() {return false;}public boolean isEnabled(int position) {return (getItemViewType(position) != TYPE_SECTION_HEADER);}@Overridepublic 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 sectionif (position == 0)return sectiontitle.getView(sectionnum, convertView, parent);if (position < size)return adapter.getView(position - 1, convertView, parent);// otherwise jump into next sectionposition -= size;sectionnum++;}return null;}@Overridepublic long getItemId(int position) {return position;}}

?

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

/** * MainListView的每一项的适配器 *  * @author lilin * @date 2011-12-24 下午08:48:43 * @ClassName: SectionListViewAdp */public class ItemListViewAdp// 继承了BaseListViewAdpextends BaseListViewAdp<ItemsModel> {public ItemListViewAdp(Activity context) {super(context);}@Overridepublic 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_contentif (mArrayList.get(position).getContent() != null) {// 设置Textholder.item_content.setText(mArrayList.get(position).getContent());}// 设置myimageviewif (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;}@Overridepublic int getCount() {if (mArrayList != null)return mArrayList.size();elsereturn 0;}@Overridepublic Object getItem(int position) {return mArrayList == null ? null : mArrayList.get(position);}@Overridepublic long getItemId(int position) {return position;}@Overrideabstract 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;// IDprivate 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;}}

?

读书人网 >移动开发

热点推荐