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;
}
}