`
龙哥IT
  • 浏览: 252712 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
文章分类
社区版块
存档分类
最新评论

Listview实现多个栏目(多个标题+每个标题下的内容)

 
阅读更多

 http://qsyz2002.blog.163.com/blog/static/7216669201143115331662/

 

 

 其中日期标题部分视图布局:

view sourceprint?1 <?xml version=”1.0″ encoding=”utf-8″?>  

 <LinearLayout xmlns:android=”http://schemas.android.com/apk/res/android”  

 android:orientation=”vertical” android:layout_width=”fill_parent”  

 android:layout_height=”10dip” android:background=”@drawable/section_background”>  

 <TextView android:id=”@+id/section_title”  

 android:layout_width=”fill_parent” android:layout_height=”match_parent” />  

 </LinearLayout> 

 

带图片的条目布局部分:

<?xml version=”1.0″ encoding=”utf-8″?>  

 <LinearLayout xmlns:android=”http://schemas.android.com/apk/res/android”  

 android:layout_width=”fill_parent” android:layout_height=”wrap_content”  

android:orientation=”horizontal” >  

 <ImageView android:id=”@+id/image” android:src=”@drawable/p”  

 android:layout_width=”wrap_content” android:layout_height=”wrap_content” />  

 <TextView android:id=”@+id/title” android:layout_width=”wrap_content”  

 android:layout_height=”wrap_content” />  

 </LinearLayout> 

 

 

 

问题在于,如何在ListView中既有标题条目又有内容条目。

这里用到了设计模式中的Iterator模式。在java代码中示例有Iterator,可以迭代ArrayList,HashSet等不同的数据结构对象。

 

ListElement是接口:

package com.easymorse.listview.customer;    

 import android.content.Context;  

 import android.view.LayoutInflater;  

import android.view.View;  

  

 public interface ListElement {  

 public int getLayoutId();  

   

 public boolean isClickable();  

 

 public View getViewForListElement(LayoutInflater layoutInflater,  

 Context context, View view);  

} 

  

其中:

  • getLayoutId()返回布局的值;
  • isClickable()返回是否可点击;
  • getViewForListElement()返回视图对象。

这个接口有两个实现:

  • SectionListElement,用于实现标题条目;
  • ContentListElement,用于实现内容条目。

见SectionListElement代码:

package com.easymorse.listview.customer;    

 import android.content.Context;  

 import android.view.LayoutInflater;  

 import android.view.View;  

 import android.widget.LinearLayout;  

 import android.widget.TextView;  

  

 public class SectionListElement implements ListElement {  

  

 private String text;  
   

public void setText(String text) {  

 this.text = text;  

 }  
   

 @Override 

 public int getLayoutId() {  

 return R.layout.section;  

 }  
   

 @Override 

 public boolean isClickable() {  

 return false;  

 }     

 @Override 

public View getViewForListElement(LayoutInflater layoutInflater,  

 Context context, View view) {  

 LinearLayout layout = (LinearLayout) layoutInflater.inflate(getLayoutId(), null);  

TextView textView=(TextView) layout.findViewById(R.id.section_title);  

 textView.setText(text);  

 return layout;  

}  

    

 } 

 

见ContentListElement代码:

public class ContentListElement implements ListElement {  
   

 private String title;  

public void setTitle(String title) {  

 this.title = title;  

 }  
 

@Override 

 public int getLayoutId() {  

return R.layout.item;  
}  

 

 @Override 

 public View getViewForListElement(LayoutInflater layoutInflater,  

 Context context, View view) {  
 LinearLayout layout = (LinearLayout) layoutInflater.inflate(  

getLayoutId(), null);  

 TextView textView = (TextView) layout.findViewById(R.id.title);  

 textView.setText(title);  

 return layout; 

 

 

ListView需要ListAdapter的实现。在这里是直接集成BaseAdapter来实现的。用于交给ListView生成出列表。代码:

public class CustomerListAdapter extends BaseAdapter {  
private Context context;  

  

 protected ArrayList<ListElement> resultList;  

 

 private LayoutInflater layoutInflater;  

  

 public CustomerListAdapter(Context context) {  

 super();  

 this.context = context;  
 this.layoutInflater = (LayoutInflater) context  

 .getSystemService(“layout_inflater”);  

 this.resultList = new ArrayList<ListElement>();  

 }  

 

@Override 

 public int getCount() {  

 return this.resultList.size();  

 }  

    
@Override 

 public Object getItem(int position) {  

 return this.resultList.get(position);  

 }  

    

 @Override 

public long getItemId(int position) {  

 return position;  

}  

    

 @Override 

 public View getView(int position, View view, ViewGroup parent) {  

 return this.resultList.get(position).getViewForListElement(  

 layoutInflater, context, view);  

}  

   

 public void addList(List<ListElement> elements) {  

 this.resultList.addAll(elements);  

 }  

    

 @Override 

 public boolean isEnabled(int position) {  

 return this.resultList.get(position).isClickable();  
 }  

 
 public void addSectionHeaderItem(String text) {  

 SectionListElement element = new SectionListElement();  

 element.setText(text);  

 this.resultList.add(element);  

 }  

} 

  

在Activity中创建CustomerListAdapter以及设置它的代码部分:

CustomerListAdapter adapter = new CustomerListAdapter(this);  


 adapter.addSectionHeaderItem(“2002-3-1″);  

  

 ArrayList<ListElement> elements = new ArrayList<ListElement>();  

 for (int i = 0; i < 5; i++) {  

ContentListElement element = new ContentListElement();  

 element.setTitle(“哈利波特第” + (i+1) + “集”);  

elements.add(element);  

}  

 adapter.addList(elements);  

   

adapter.addSectionHeaderItem(“2002-2-2″);  

    

 elements = new ArrayList<ListElement>();  

 for (int i = 0; i < 3; i++) {  

ContentListElement element = new ContentListElement();  

 element.setTitle(“指环王第” + (i+1) + “集”);  

elements.add(element);  

}  

 adapter.addList(elements);  

   

 this.setListAdapter(adapter); 

  

这里ListActivity,还需要注意两件事情,Activity要继承ListActivity。另外,在layout中:

ListView的id要用系统自带的

 

  • 大小: 56.5 KB
分享到:
评论

相关推荐

    ListView 多栏目显示

    在实现多栏目显示时,你可能需要自定义TListView的ItemAppearance或ItemTemplate,这样每个列表项可以根据你的需求显示多个字段的信息。例如,你可以创建一个ItemAppearance,包含标题、详细描述、日期等不同栏目,...

    模拟新浪微博的随便看看栏目(ListView)

    本教程将聚焦于模拟新浪微博的“随便看看”栏目,这个栏目通常显示一系列动态、文章或者图片,用户可以滑动屏幕查看更多的内容。通过实现ListView,我们可以为用户提供一个高效且交互性强的界面。 首先,我们需要...

    VC锁定ListView控件的栏目头宽度

    在MFC编程中,ListView控件是常用的可视化组件,它用于显示列表数据,通常包括多个列,每列有一个标题(栏目头)。用户可以方便地通过鼠标操作调整列宽,但有时为了保持界面的一致性和控制用户体验,我们可能需要...

    android栏目选择器

    这通常意味着我们需要实现一个滚动列表,每个条目代表一个栏目,可能包括图片和文字描述,且具有选中状态的视觉反馈。我们可以使用RecyclerView或者HorizontalScrollView来实现这个滚动列表,同时配合Adapter来填充...

    模仿新浪微博随便看看栏目

    2. **布局设计**:每个ListView项通常包含多个元素,如头像、用户名、时间、内容等。我们可以创建一个XML布局文件(如`sina_list_item.xml`)来定义这些元素,并在`getView()`方法中使用`LayoutInflater`将该布局...

    类似搜狐新闻安卓版栏目定制

    在安卓开发领域,"类似搜狐新闻安卓版栏目定制"是一个常见的需求,涉及到多个技术点,包括用户界面设计、数据加载、列表视图优化等。在这个项目中,开发者需要创建一个与搜狐新闻应用类似的用户界面,并允许用户定制...

    城市列表排序,策划删除,网易栏目,上下拉刷新

    在`RecyclerView`中,每个条目可以代表一个栏目,通过点击条目进入相应的新闻列表页面。 6. **上下拉刷新**: 上下拉刷新是移动应用中常见的交互设计,用于加载更多数据或更新列表。在`RecyclerView`中,可以集成如`...

    小巫新闻客户端开发说明书

    - **(2)** 内容列表设计:每个新闻分类下都有一个ListView,展示新闻标题、摘要、来源和发布时间。使用TextView和Button构建元素,布局清晰。 - **(3)** 新闻内容界面:设计用于显示新闻详细内容的界面,可能包含...

    第7讲网站信息发布栏目前台页面制作.pdf

    - DataList的模板包括ItemTemplate(每个数据项的默认模板)、HeaderTemplate(头部模板)、FooterTemplate(尾部模板)等。本讲主要讲解了如何编辑这三种模板以呈现新闻标题列表。 - 模板编辑是难点,需要学生...

    android 多级下拉菜单

    本示例提供的"android 多级下拉菜单"是一个实现三级菜单的示例,它允许动态添加菜单项,并在用户选择第三级菜单时显示所选内容所属的一级、二级和三级栏目名。通过这种方式,开发者可以构建出灵活且易于使用的导航...

    多栏位combox组件

    多栏位ComBox组件则解决了这个问题,它可以显示多列数据,每个栏目可以显示不同类型的信息,比如:姓名、年龄、性别等,这样用户可以在一个控件中查看到更丰富的信息。 ListComBox和ListViewComBox可能是这个组件的...

    基于ASP.NET的Web应用开发技术实用教程[方玉燕][电子教案]项目5-企业网站.ppt

    本项目共分为六个任务,每个任务都包含了具体的学习内容和实战演练时间,旨在通过实际操作加深理解和巩固知识。例如,任务1涉及网站结构分析与设计,包括布局设计、文件类型识别以及Web.config的配置;任务2和3可能...

    移动设备应用程序开发大作业.doc

    7. **开发流程**:开发一个Android新闻客户端通常涉及需求分析、设计、编码、测试和发布等多个阶段。开发过程中,需要熟练运用Android Studio等开发工具,理解Android编程的基本概念,如意图(Intent)、服务(Service)...

    移动设备应用程序开发大作业.pdf

    - **功能性需求**:首页包含多个子栏目,如荆州、社会、娱乐、体育等,每个子栏目都有头条和详细新闻列表。内容浏览区支持左右滑动,便于用户在不同新闻之间切换。用户可自由切换阅读模式,同时支持将喜欢的新闻...

    移动设备应用程序开发大作业.docx编程资料

    - **多类别导航**:应用界面需设有多个新闻类别导航,例如“首页”、“荆州”、“社会”、“娱乐”、“体育”等,并在每个类别下展示头条新闻和一系列详细的新闻列表。 - **个性化阅读体验**:允许用户自定义新闻...

    史上最好传智播客就业班.net培训教程60G 不下会后悔

    注:以上三个案例,上课时会根据每个班的课堂反馈选择其中一个案例予以讲解学习。 7、如鹏网项目(9天) 查看项目演示 功能点 站内搜索、栏目管理、视频播放(完全模仿优酷视频页面)、焦点图、静态页面生成(新浪、...

    Report machine 2.4

    - 可以打印多个PageFooter,方便制作页小计. v.2.1(Build 2001/10/18) - 大大增强了TRMFormReport功能,可以与ScreenReport, Dev ExpressPrinting System媲美; - TRMFormReport增加了表格的自动缩放功能....

    无限循环PageView列表

    很常见的一个应用场景——显示图片:如果显示一张图片,我们用一个 UIImageView 足矣,如果要显示多张图片,并且可以左右滚动,最简单的办法是用一个 UIScrollView 包含多个 UIImageView, 但是这样带来的后果则是,...

Global site tag (gtag.js) - Google Analytics