首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 移动开发 > 移动开发 >

listView 平添多个不同的adapter

2012-09-29 
listView 添加多个不同的adapter。有时候我们想在listView上分类,或者呢 有时候一行显示两列内容,有时候需

listView 添加多个不同的adapter。

有时候我们想在listView上分类,或者呢 有时候一行显示两列内容,有时候需要三列内容 ,那怎么实现呢,这里呢就要使用

class Section {String caption;Adapter adapter;Section(String caption, Adapter adapter) {this.caption=caption;this.adapter=adapter;}}

?

自定义一个类,这个类呢包含多个adapter就可以了,想用那种就用那种。

abstract public class SectionedAdapter extends BaseAdapter {abstract protected View getHeaderView(String caption,int index,View convertView,ViewGroup parent);private List<Section> sections=new ArrayList<Section>();private static int TYPE_SECTION_HEADER=0;public SectionedAdapter() {super();}public void addSection(String caption, Adapter adapter) {sections.add(new Section(caption, adapter));}public Object getItem(int position) {for (Section section : this.sections) {if (position==0) {return(section);}int size=section.adapter.getCount()+1;if (position<size) {return(section.adapter.getItem(position-1));}position-=size;}return(null);}public int getCount() {int total=0;for (Section section : this.sections) {total+=section.adapter.getCount()+1; // add one for header}return(total);}public int getViewTypeCount() {int total=1;// one for the header, plus those from sectionsfor (Section section : this.sections) {total+=section.adapter.getViewTypeCount();}return(total);}public int getItemViewType(int position) {int typeOffset=TYPE_SECTION_HEADER+1;// start counting from herefor (Section section : this.sections) {if (position==0) {return(TYPE_SECTION_HEADER);}int size=section.adapter.getCount()+1;if (position<size) {return(typeOffset+section.adapter.getItemViewType(position-1));}position-=size;typeOffset+=section.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 sectionIndex=0;for (Section section : this.sections) {if (position==0) {return(getHeaderView(section.caption, sectionIndex,convertView, parent));}int size=section.adapter.getCount()+1;if (position<size) {return(section.adapter.getView(position-1,convertView,parent));}position-=size;sectionIndex++;}return(null);}@Overridepublic long getItemId(int position) {return(position);}class Section {String caption;Adapter adapter;Section(String caption, Adapter adapter) {this.caption=caption;this.adapter=adapter;}}}

?

然后主类就是

public class SectionedDemo extends ListActivity {private static String[] items={"lorem", "ipsum", "dolor","purus"};@Overridepublic void onCreate(Bundle icicle) {super.onCreate(icicle);setContentView(R.layout.main);adapter.addSection("Original",new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,items));List<String> list=Arrays.asList(items);Collections.shuffle(list);adapter.addSection("Shuffled",new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,list));list=Arrays.asList(items);Collections.shuffle(list);adapter.addSection("Re-shuffled",new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,list));setListAdapter(adapter);}SectionedAdapter adapter=new SectionedAdapter() {protected View getHeaderView(String caption, int index,View convertView,ViewGroup parent) {TextView result=(TextView)convertView;if (convertView==null) {result=(TextView)getLayoutInflater().inflate(R.layout.header, null);}result.setText(caption);return(result);}};}

?

其他的就需要你自己变化了,我这里只是吧内容打乱。
listView 平添多个不同的adapter
?有些东西我只是简单调解没有源码或者我认为很简单的就不提供了。

对于复杂一些或者很难说清的 本人表达能力有限会把源码发上的

thank you 5 楼 AndroidGuy 2011-09-24   你好,今天看了下你这代码,有个问题要请教一下:

在getView()中,当position ==  0时,返回null,为什么不会死机,我用我自己的数据就死机了,请问这是个bug吗?

热点排行