ListView通过自定义适配器来显示数据并对Item项以及子view项的控件实现监听.
本篇主要功能.
通过xml pull解析得到数据,然后通过自定义的Adapter绑定数据源,ListView绑定适配器,并且实现Item项的点击事件以及子View控件的点击事件.
一.实体类.
Book.java
- package cn.skychi.news;
- /**
- * @package : cn.skychi.news
- * @description: 实体类.
- * @author : qc
- * @version : v1.0
- * @date : 2012-11-29 下午2:45:49
- */
- public class Book
- {
- private int id;
- private String name;
- private float price;
- public int getId()
- {
- return id;
- }
- public void setId(int id)
- {
- this.id = id;
- }
- public String getName()
- {
- return name;
- }
- public void setName(String name)
- {
- this.name = name;
- }
- public float getPrice()
- {
- return price;
- }
- public void setPrice(float price)
- {
- this.price = price;
- }
- @Override
- public String toString()
- {
- return this.id + ":" + this.name + ":" + this.price;
- }
- }
二.xmlPull解析.
- package cn.skychi.parser;
- /**
- * @package : cn.skychi.parser
- * @description:
- * @author : qc
- * @version : v1.0
- * @date : 2012-11-29 下午2:49:00
- */
- import java.io.InputStream;
- import java.util.ArrayList;
- import java.util.List;
- import org.xmlpull.v1.XmlPullParser;
- import cn.skychi.news.Book;
- import android.content.Context;
- import android.util.Log;
- import android.util.Xml;
- public class PullParseService
- {
- public static List<Book> getBooks(Context context) throws Exception
- {
- List<Book> books = null;
- Book book = null;
- InputStream inputStream = context.getResources().getAssets()
- .open("book.xml");
- XmlPullParser parser = Xml.newPullParser();
- parser.setInput(inputStream, "UTF-8");
- int event = parser.getEventType();// 产生第一个事件
- while (event != XmlPullParser.END_DOCUMENT)
- {
- switch (event)
- {
- case XmlPullParser.START_DOCUMENT:// 判断当前事件是否是文档开始事件
- books = new ArrayList<Book>();// 初始化books集合
- break;
- case XmlPullParser.START_TAG:// 判断当前事件是否是标签元素开始事件
- if ("book".equals(parser.getName()))
- {// 判断开始标签元素是否是book
- book = new Book();
- book.setId(Integer.parseInt(parser.getAttributeValue(0)));// 得到book标签的属性值,并设置book的id
- }
- if (book != null)
- {
- if ("name".equals(parser.getName()))
- {// 判断开始标签元素是否是name
- book.setName(parser.nextText());
- }
- else if ("price".equals(parser.getName()))
- {// 判断开始标签元素是否是price
- book.setPrice(Float.parseFloat(parser.nextText()));
- }
- Log.d("TAG", "" + book.toString());
- }
- break;
- case XmlPullParser.END_TAG:// 判断当前事件是否是标签元素结束事件
- if ("book".equals(parser.getName()))
- {// 判断结束标签元素是否是book
- books.add(book);// 将book添加到books集合
- book = null;
- }
- break;
- }
- event = parser.next();// 进入下一个元素并触发相应事件
- }// end while
- return books;
- }
- }
三.MainActivity
- package cn.skychi;
- import java.util.ArrayList;
- import java.util.List;
- import cn.skychi.news.Book;
- import cn.skychi.news.NewsInfo;
- import cn.skychi.parser.NewsPullParser;
- import cn.skychi.parser.PullParseService;
- import android.os.Bundle;
- import android.app.Activity;
- import android.app.AlertDialog;
- import android.content.Context;
- import android.content.DialogInterface;
- import android.util.Log;
- import android.view.LayoutInflater;
- import android.view.Menu;
- import android.view.View;
- import android.view.ViewGroup;
- import android.widget.AdapterView;
- import android.widget.ArrayAdapter;
- import android.widget.BaseAdapter;
- import android.widget.ImageButton;
- import android.widget.ImageView;
- import android.widget.ListView;
- import android.widget.RelativeLayout;
- import android.widget.TextView;
- import android.widget.Toast;
- public class MainActivity extends Activity
- {
- private ListView newsListView;
- private ArrayList<NewsInfo> newsInfoList;
- private List<Book> bookList;
- private MyAdapter adapter;
- @Override
- protected void onCreate(Bundle savedInstanceState)
- {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_main);
- newsListView = (ListView) findViewById(R.id.listView);
- try
- {
- bookList = PullParseService.getBooks(this);
- }
- catch(Exception e)
- {
- e.printStackTrace();
- }
- adapter = new MyAdapter(this, bookList);
- newsListView.setAdapter(adapter);
- newsListView
- .setOnItemClickListener(new AdapterView.OnItemClickListener()
- {
- @Override
- public void onItemClick(AdapterView<?> parent, View view,
- int position, long id)
- {
- Toast.makeText(
- MainActivity.this,
- "position = " + position + "\n" + "第" + id
- + "行", 3000).show();
- }
- });
- }
- private class MyAdapter extends BaseAdapter
- {
- private Context context;
- private List<Book> book;
- private LayoutInflater inflater;
- public MyAdapter(Context context, List<Book> book)
- {
- super();
- this.context = context;
- this.book = book;
- inflater = LayoutInflater.from(context);
- }
- class ViewHolder
- {
- ImageView picture;
- TextView name;
- TextView price;
- ImageButton arrowPicture;
- }
- @Override
- public Object getItem(int position)
- {
- return book.get(position);
- }
- @Override
- public long getItemId(int position)
- {
- return position;
- }
- @Override
- public View getView(final int position, View convertView,
- ViewGroup parent)
- {
- ViewHolder holder = new ViewHolder();
- if (convertView == null)
- {
- convertView = inflater.inflate(R.layout.news_item, null);
- holder.picture = (ImageView) convertView
- .findViewById(R.id.newsImage);
- convertView.setTag(holder);
- holder.name = (TextView) convertView
- .findViewById(R.id.newsTitle);
- holder.price = (TextView) convertView
- .findViewById(R.id.newsDate);
- holder.arrowPicture = (ImageButton) convertView
- .findViewById(R.id.menuSend);
- }
- else
- {
- holder = (ViewHolder) convertView.getTag();
- }
- holder.name.setText(book.get(position).getName());
- holder.price.setText(String.valueOf(book.get(position).getPrice()));
- holder.arrowPicture
- .setImageResource(android.R.drawable.ic_menu_more);
- holder.picture.setImageResource(R.drawable.ic_launcher);
- holder.arrowPicture.setOnClickListener(new View.OnClickListener()
- {
- @Override
- public void onClick(View v)
- {
- showDetailDialog(book, position);
- }
- });
- return convertView;
- }
- @Override
- public int getCount()
- {
- return book.size();
- }
- }
- @Override
- public boolean onCreateOptionsMenu(Menu menu)
- {
- // Inflate the menu; this adds items to the action bar if it is
- // present.
- getMenuInflater().inflate(R.menu.activity_main, menu);
- return true;
- }
- public void showDetailDialog(List<Book> book, int position)
- {
- if (book != null && position >= 0)
- {
- new AlertDialog.Builder(MainActivity.this)
- .setTitle("详细信息")
- .setMessage(
- "Name :" + "\n" + book.get(position).getName()
- + "\n\n" + "Price :" + "\n"
- + +book.get(position).getPrice() + "\n")
- .setPositiveButton("ok",
- new DialogInterface.OnClickListener()
- {
- @Override
- public void onClick(DialogInterface dialog,
- int which)
- {
- dialog.cancel();
- }
- }).show();
- }
- }
- }
- 四.assert目录下.book.xml
- <pre name="code" class="html"><?xml version="1.0" encoding="UTF-8"?>
- <books>
- <book id="12">
- <name>thinking in java</name>
- <price>85.5</price>
- </book>
- <book id="15">
- <name>Spring in Action</name>
- <price>39.0</price>
- </book>
- <book id="12">
- <name>thinking in java</name>
- <price>85.5</price>
- </book>
- <book id="15">
- <name>Spring in Action</name>
- <price>39.0</price>
- </book><book id="12">
- <name>thinking in java</name>
- <price>85.5</price>
- </book>
- <book id="15">
- <name>Spring in Action</name>
- <price>39.0</price>
- </book><book id="12">
- <name>thinking in java</name>
- <price>85.5</price>
- </book>
- <book id="15">
- <name>Spring in Action</name>
- <price>39.0</price>
- </book><book id="12">
- <name>thinking in java</name>
- <price>85.5</price>
- </book>
- <book id="15">
- <name>Spring in Action</name>
- <price>39.0</price>
- </book>
- <book id="15">
- <name>Spring in Action</name>
- <price>39.0</price>
- </book><book id="12">
- <name>thinking in java</name>
- <price>85.5</price>
- </book>
- <book id="15">
- <name>Spring in Action</name>
- <price>39.0</price>
- </book><book id="12">
- <name>thinking in java</name>
- <price>85.5</price>
- </book>
- <book id="15">
- <name>Spring in Action</name>
- <price>39.0</price>
- </book>
- <book id="15">
- <name>Spring in Action</name>
- <price>39.0</price>
- </book><book id="12">
- <name>thinking in java</name>
- <price>85.5</price>
- </book>
- <book id="15">
- <name>Spring in Action</name>
- <price>39.0</price>
- </book><book id="12">
- <name>thinking in java</name>
- <price>85.5</price>
- </book>
- <book id="15">
- <name>Spring in Action</name>
- <price>39.0</price>
- </book>
- <book id="15">
- <name>Spring in Action</name>
- <price>39.0</price>
- </book><book id="12">
- <name>thinking in java</name>
- <price>85.5</price>
- </book>
- <book id="15">
- <name>Spring in Action</name>
- <price>39.0</price>
- </book><book id="12">
- <name>thinking in java</name>
- <price>85.5</price>
- </book>
- <book id="15">
- <name>Spring in Action</name>
- <price>39.0</price>
- </book>
- </books>
- </pre><pre name="code" class="java"></pre><pre name="code" class="java"></pre><pre name="code" class="java"></pre><pre name="code" class="java"></pre><pre name="code" class="java"><pre></pre>五.布局文件:
- <p></p>
- <p>activity_main.xml</p>
- <p></p>
- <pre name="code" class="java"><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:tools="http://schemas.android.com/tools"
- android:layout_width="fill_parent"
- android:layout_height="fill_parent"
- tools:context=".MainActivity" >
- <ListView
- android:id="@+id/listView"
- android:layout_width="fill_parent"
- android:layout_height="fill_parent"
- >
- </ListView>
- </RelativeLayout></pre><br>
- news_item.xml
- <p></p>
- <p></p>
- <pre name="code" class="java"><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:tools="http://schemas.android.com/tools"
- android:id="@+id/newsInfoLayout"
- android:layout_width="fill_parent"
- android:layout_height="wrap_content"
- android:descendantFocusability="blocksDescendants" >
- <TextView
- android:id="@+id/newsTitle"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_alignTop="@+id/newsImage"
- android:layout_marginLeft="20dp"
- android:layout_toLeftOf="@+id/menuSend"
- android:layout_toRightOf="@+id/newsImage"
- android:ellipsize="middle"
- android:singleLine="true"
- android:text="TextView" />
- <!--
- <TextView
- android:id="@+id/newsContent"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_above="@+id/newsDate"
- android:layout_alignLeft="@+id/newsTitle"
- android:layout_below="@+id/newsTitle"
- android:layout_toLeftOf="@+id/menuSend"
- android:visibility="gone" />
- -->
- <TextView
- android:id="@+id/newsDate"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_alignBottom="@+id/newsImage"
- android:layout_marginLeft="20dp"
- android:layout_toLeftOf="@+id/menuSend"
- android:layout_toRightOf="@+id/newsImage"
- android:singleLine="true"
- android:text="TextView" />
- <ImageView
- android:id="@+id/newsImage"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_alignParentLeft="true"
- android:layout_alignParentTop="true"
- android:layout_marginLeft="30dp"
- android:src="@drawable/ic_launcher" />
- <ImageButton
- android:id="@+id/menuSend"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_alignParentRight="true"
- android:layout_centerVertical="true"
- android:layout_marginRight="19dp"
- android:background="#ff00ff"
- android:clickable="false"
- android:focusable="false"
- android:src="@android:drawable/ic_menu_more" />
- </RelativeLayout></pre><br>
- 说明:在实现listview item 项以及View控件的监听时要在news_item.xml 中进行配置.即:
- <p>android:descendantFocusability="blocksDescendants" 以及android:clickable="false"android:focusable="false"</p>
- 否则,item 点击事件不会执行.
- <p></p>
- <p><br>
- </p>
- <p><br>
- </p>
- <p><span style="white-space:pre"></span></p>
- <pre></pre>
- <pre></pre>
- <pre></pre>
- </pre>
ListView通过自定义适配器来显示数据并对Item项以及子view项的控件实现监听.相关推荐
- 【Android开发】自定义ListView,使用通用适配器,并实现ListView上的每一项和每一项上的按钮等控件同时监听
ListView在Android开发中是比较常用的系统组件,但是有时候我们除了需要做ListView上每一行的点击监听事件之外,如果每一行上还有其他需要监听的控件例如Button.CheckBox等, ...
- Android ListView item里控件的监听
在进行android开发的时候,我们会经常遇到,需要监听listview的item的控件(如button)的问题,比如点击item的图片跳转详情页,音乐列表里的item都有一个播放按钮,点击这个播放按 ...
- listview刷新与内部控件的监听
困扰我多日的关于Android中的listview问题,今天终于完全解决了,首先讲一下到底遇到的是什么问题:(1)点击listview的item布局中的ImageButton按钮来获取相应的Textv ...
- android自定义控件中文乱码,Android笔记--自定义View之组合控件
Android-自定义View 分享是最好的记忆-- 如需转发请注明出处 [强调]:共同学习 共同进步 不喜勿喷 内容简介 前言 实现 总结 1. 前言 这次更新有2个目的 1. 复用控件,而不是每次 ...
- mp8播放器 android 1.4,listview(自定义适配器)与媒体播放器android
嘿家伙我在listview(自定义适配器)面临问题 . 我已经实现了播放音频(mp3文件)的媒体播放器的listview . 我已经在我的原始文件夹中包含了mp3文件 . 我知道这是一个循环视图 . ...
- android listview 滑动条显示_第七十六回:Android中UI控件之RecyclerView基础
各位看官们,大家好,上一回中咱们说的是Android中UI控件之ListView优化的例子,这一回咱们说的例子是UI控件之RecyclerView.闲话休提,言归正转.让我们一起Talk Androi ...
- python gui 显示表格_python GUI库图形界面开发之PyQt5表格控件QTableView详细使用方法与实例...
PyQt5表格控件QTableView简介 在通常情况下,一个应用需要和一批数据进行交互,然后以表格的形式输出这些信息,这时就需要用到QTableView类了,在QTableView中可以使用自定义的 ...
- mfc调取摄像头显示并截图_用OpenCV在MFC Dialog中Picture控件上显示摄像头采集实时视频...
OpenCV之所以能在MFC Dialog的Picture控件上绘图,全靠了CvvImage::DrawToHDC()方法.这就是下文为出现CvvImage和HDC的原因.下面是具体过程,用OpenC ...
- android自定义view流布局,Android控件进阶-自定义流式布局和热门标签控件
一.概述: 在日常的app使用中,我们会在android 的app中看见 热门标签等自动换行的流式布局,今天,我们就来看看如何 自定义一个类似热门标签那样的流式布局吧 类似的自定义换行流式布局控件.下 ...
最新文章
- 知乎高赞怎么自学 python,大概要多久?
- JSF/SpringMVC/Struts2区别与比较
- JDBC , 使用java来控制mysql。JavaWeb开发的分层设计-三层架:DAO层设计,连接池使用,类加载使用,配置...
- 使用百度UEditor
- 【TensorFlow】conv2d函数参数解释以及padding理解
- windows常用指令
- Java知识点总结(Java容器-ArrayList)
- ios13.5正式版信号怎样?
- 还被python收智商税?做大数据的朋友告诉我月薪2w的方法
- 相分离相关文章阅读Intrinsically disordered linkers determine the interplay between phase separation and gelat
- 海量数据挖掘MMDS week6: 决策树Decision Trees
- 【一】如果让我学习TensorFlow,我该怎么学?
- SpringBoot Controller Post接口单元测试
- Unity 移动端简单手势控制(移动,旋转,缩放)
- 北京大学C语言学习第6天
- 爬取唯美女生网站上所有小姐姐的照片
- wlan:11a/11b/11g/11n/11ac
- Netlify前端自动化部署服务
- 60帧的丝般顺畅 - QQ飞车手游优化点滴
- 怎么搭建一个自己的博客?
热门文章
- 【C 语言】内存四区原理 ( 栈内存与堆内存对比示例 | 函数返回的堆内存指针 | 函数返回的栈内存指针 )
- 【Android 安全】DEX 加密 ( 阶段总结 | 主应用 | 代理 Application | Java 工具 | 代码示例 ) ★
- 【计算理论】自动机 示例 ( 自动机示例 | 自动机表示方式 | 自动机计算流程简介 )
- 02 - Unit010:关联映射
- Atitit. 破解 拦截 绕过 网站 手机 短信 验证码 方式 v2 attilax 总结
- result的type属性
- Linux服务器通过rz/sz轻松上传下载文件
- 分页控件-ASP.NET(AspNetPager)
- USACO SEC.1.2 No.4 Palindromic Squares
- Oracle10g 64位 在Windows 2008 Server R2 中的安装 解决方案