Listview Section 多个标题以及内容

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

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是接口:

  1. 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代码:

  1. 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代码:

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要用系统自带的

Listview Section 多个标题以及内容

时间: 2024-11-10 16:19:38

Listview Section 多个标题以及内容的相关文章

dedecms在后台替换文章标题、内容、摘要、关键字

dedecms在后台替换文章标题.内容.摘要.关键字所在的字段为: 后台替换文章内容 数据表:dede_addonarticle 字段:body 后台替换文章摘要内容 数据表:dede_archives 字段:description 后台替换文章标题内容 数据表:dede_archives 字段:title 后台替换文章关键词: 数据表:dede_archives 字段: keywords

微信分享修改分享的标题,内容等

<script> //微信分享 var wimg = "分享图片网址123"; var wurl = "分享网址123"; var wdesc = '分享内容123'; var wtit = '分享标题123'; var wappid = ''; function shareMsg() {//<span style="font-family: Arial, Helvetica, sans-serif;">发送给好友<

JQuery 实现标题与内容相呼应样式

效果图如下:鼠标移到标题上,标题下面显示标题对应的内容.实现的方法如下: 1.引入css和js文件 <link href="public/CSS/StyleSheet.css" rel="stylesheet" /> <script src="public/jquery/js/jquery.js"></script> 其中,StyleSheet.css的内容如下: .picture-title{height:

python 3.5 django 笔记(六)修改博客标题与内容

接下来,要把博客继续完善 画个画儿先~~ ~~~~~~ ~~~~~~ 主页点击修改文章----修改文章页面 主页点击新文章----新文章页面 新文章提交后----主页 修改文章提交后----修改文章 ~~~~~~ ~~~~~~ 敲代码咯 编辑edit_page.html页面 <body> <form action="{% url 'blog:edit_action' %}" method="post"> {% csrf_token %} &l

操作新弹出窗口之验证标题和内容

1)验证标题 package com.learningselenium.normalwebdriver; import static org.junit.Assert.*; import java.util.Set; import org.junit.After; import org.junit.Before; import org.junit.Test; import org.openqa.selenium.By; import org.openqa.selenium.WebDriver;

[iOS]改变UIAlertController的标题、内容的字体和颜色

https://www.jianshu.com/p/51949eec2e9c 2016.03.23 22:36* 字数 272 阅读 37401评论 54喜欢 72 在开发中,弹出框是必不可少的,通常情况下,我们只要弹出系统自带的弹出框就可以.but,在某些情况下,万恶的UI会要求你修改显示文字的大小.颜色,虽然系统自带有一种红色字体的UIAlertAction,但是这种Action并不能放在Cancel位置,所以,更多时候,需要我们自己修改文字字体和颜色.我采用的方法是KVC:正常情况下,我们

android 的ListView中,如何判断其内容已滚动到最顶部或者最底部?

根据这个方法检测: 1 getListView().setOnScrollListener(new OnScrollListener() { 2 @Override 3 public void onScrollStateChanged(AbsListView view, int scrollState) { 4 } 5 6 @Override 7 public void onScroll(AbsListView view, int firstVisibleItem, int visibleIte

Android ListView实现新闻客户端的新闻内容图文混排

布局文件: <LinearLayout xmlns:android="<a href="http://schemas.android.com/apk/res/android">http://schemas.android.com/apk/res/android</a>" xmlns:tools="<a href="http://schemas.android.com/tools">http://

php获取网页标题和内容函数(不包含html标签)

码如下:function getPageContent($url) { //$url='http://www.ttphp.com; $pageinfo = array();           $pageinfo[content_type] = '';           $pageinfo[charset] = '';           $pageinfo[title] = '';           $pageinfo[description] = '';           $pagei