ListView在我们学习Android的过程中是非常重要得一个部分。

  listview主要有两个职责

  1)将数据填充到布局。

  2)处理用户的选择点击等操作。

  

  一个ListView的创建需要3个元素。

  (1)ListView中的每一列的View。

  (2)填入View的数据或者图片等。

那么我们直接通过案例来加深对listviewde理解

首先,我们创建一个listview布局

 <?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" > <ListView
android:id="@+id/listView1"
android:layout_width="match_parent"
android:layout_height="match_parent" > </ListView> </LinearLayout>

接着我们来为这个listview添加的item设置显示样式

  

 <?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal" > <ImageView
android:id="@+id/imageView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_margin="10dp"
android:src="@drawable/tou1" /> <LinearLayout
android:layout_weight=""
android:layout_width="match_parent"
android:layout_height="80dp"
android:orientation="vertical"
android:layout_margin="5dp"
>
<TextView android:id="@+id/tv_userName"
android:layout_width="match_parent"
android:layout_height="20dp"
/> <TextView
android:id="@+id/tv_lastMessage"
android:layout_width="match_parent"
android:layout_height="15dp"
/> </LinearLayout> <TextView
android:id="@+id/tv_datetime"
android:layout_width="150dp"
android:layout_height="15dp"
/>
</LinearLayout>

然后我们为了模拟数据库插入,先创建一个实体类

  

 package com.example.entity;

 public class Message {
private String tou1;
private String userName;
private String lastMessage;
private String datetime; public String getTou1() {
return tou1;
}
public void setTou1(String tou1) {
this.tou1 = tou1;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getLastMessage() {
return lastMessage;
}
public void setLastMessage(String lastMessage) {
this.lastMessage = lastMessage;
}
public String getDatetime() {
return datetime;
}
public void setDatetime(String datetime) {
this.datetime = datetime;
}
}

剩下的就是对listview进行数据的获取

  

 package com.example.winxin2;

 import java.util.ArrayList;
import java.util.List; import com.example.entity.Message; import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.view.ContextMenu;
import android.view.ContextMenu.ContextMenuInfo;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnCreateContextMenuListener;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.BaseAdapter;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast; public class MainActivity extends Activity { private ListView lv;
private List<Message> messageList = new ArrayList<Message>(); @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.weixin); //模拟读取数据库或者互联网
for (int i = ; i < ; i++) {
Message m = new Message();
m.setTou1("xxx");
m.setUserName("张三疯"+i);
m.setLastMessage("今晚有约,一起华山论剑");
m.setDatetime("11月11日");
messageList.add(m);
} lv = (ListView)findViewById(R.id.listView1);
//简单理解为VC绑在一起
lv.setAdapter( new BaseAdapter(){ //返回多少条记录
@Override
public int getCount() {
// TODO Auto-generated method stub
return messageList.size();
}
//每一个item项,返回一次界面
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View view = null; //下面的半段是为了让我们在拉伸的时候更顺畅,即之前取出的数据我们可以在缓存在获取,不需要在重新获取一次
//布局不变,数据变 //如果缓存为空,我们生成新的布局作为1个item
if(convertView==null){
Log.i("info:", "没有缓存,重新生成"+position);
LayoutInflater inflater = MainActivity.this.getLayoutInflater();
//因为getView()返回的对象,adapter会自动赋给ListView
view = inflater.inflate(R.layout.listview_item_layout, null);
}else{
Log.i("info:", "有缓存,不需要重新生成"+position);
view = convertView;
}
Message m = messageList.get(position); TextView tv_userName = (TextView)view.findViewById(R.id.tv_userName);
tv_userName.setText( m.getUserName() );
tv_userName.setTextSize(); TextView tv_lastMessage = (TextView)view.findViewById(R.id.tv_lastMessage);
tv_lastMessage.setText( m.getLastMessage() );
tv_lastMessage.setTextSize(); TextView tv_datetime = (TextView)view.findViewById(R.id.tv_datetime);
tv_datetime.setText( m.getDatetime() );
tv_datetime.setTextSize(); return view;
} @Override
public Object getItem(int position) {
// TODO Auto-generated method stub
return null;
} @Override
public long getItemId(int position) {
// TODO Auto-generated method stub
return ;
} } ); //给ListView添加点击事件
lv.setOnItemClickListener(new OnItemClickListener() { @Override
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
Message getList = messageList.get(position);
String infoId = getList.getTou1(); //获取信息id
String infoTitle = getList.getUserName(); //获取信息标题
String infoDetails = getList.getLastMessage(); //获取信息详情 //Toast显示测试
Toast.makeText(MainActivity.this, "信息ID:"+infoId,Toast.LENGTH_SHORT).show();
} }); //长按菜单显示
lv.setOnCreateContextMenuListener(new OnCreateContextMenuListener() {
public void onCreateContextMenu(ContextMenu conMenu, View view , ContextMenuInfo info) {
/*
* 参数menu:参数menu为事件的上下文菜单。 参数v:参数v为事件源View,当该View获得焦点时才可能接收该方法的事件响应。 参数info:info对象中封装了有关上下文菜单额外的信息,这些信息取决于事件源View。
*/
conMenu.setHeaderTitle("菜单");
conMenu.add(, , , "条目一");
conMenu.add(, , , "条目二");
conMenu.add(, , , "条目三");
}
}); } //长按菜单处理函数
public boolean onContextItemSelected(MenuItem aItem) {
AdapterView.AdapterContextMenuInfo info = (AdapterView.AdapterContextMenuInfo)aItem.getMenuInfo();
switch (aItem.getItemId()) {
case :
Toast.makeText(MainActivity.this, "你点击了条目一",Toast.LENGTH_SHORT).show();
return true;
case :
Toast.makeText(MainActivity.this, "你点击了条目二",Toast.LENGTH_SHORT).show(); return true;
case :
Toast.makeText(MainActivity.this, "你点击了条目三",Toast.LENGTH_SHORT).show();
return true;
}
return false;
}
}

本人比较赖,直接将写好的代码放上来了,里面的基本做好了注释

那么,我们来看一下结果吧

上面第是点击和长按的点击效果。

Android菜鸟成长记10 -- ListVew的更多相关文章

  1. Android菜鸟成长记4-button点击事件

    Button 1.button按钮的创建 一般来说,在我们新建一个Android项目的时候,会有会默认有一个activity_main.xml的文件 如果你在新建项目的时候,把Create Activ ...

  2. Android菜鸟成长记16 -- JSON的解析

    JSON的定义  一种轻量级的数据交换格式,具有良好的可读和便于快速编写的特性.业内主流技术为其提供了完整的解决方案(有点类似于正则表达式 ,获得了当今大部分语言的支持),从而可以在不同平台间进行数据 ...

  3. Android菜鸟成长记15 -- BitMap

    BitMap简介 Bitmap是Android系统中的图像处理的最重要类之一.用它可以获取图像文件信息,进行图像剪切.旋转.缩放等操作,并可以指定格式保存图像文件.本文从应用的角度,着重介绍怎么用Bi ...

  4. Android菜鸟成长记14 -- AsnyTask

    本篇随笔将讲解一下Android的多线程的知识,以及如何通过AsyncTask机制来实现线程之间的通信. 一.Android当中的多线程 在Android当中,当一个应用程序的组件启动的时候,并且没有 ...

  5. Android菜鸟成长记13 -- 初识application

    二.Application 简介 Application 类是用来维护应用程序全局状态.你可以提供自己的实现,并在 AndroidManifest.xml文件的 <application> ...

  6. Android菜鸟成长记12 -- ORMLite的简单使用

    在我们的开发中,为了提高开发效率,我们一般都会使用到框架,ormilte则是我们必不可少的数据库框架. 对于ORMLite我也是今天才刚刚接触,我们先从一个简单的项目来了解它吧. ORMLite ja ...

  7. Android菜鸟成长记11 -- sqlite数据库的设计和升降级

    Google为Andriod的较大的数据处理提供了SQLite,他在数据存储.管理.维护等各方面都相当出色,功能也非常的强大.SQLite具备下列特点: 1.轻量级 使用 SQLite 只需要带一个动 ...

  8. Android菜鸟成长记9 -- selector的用法

    在项目开发的时候,由于系统给出的控件不够美观,因此开发时领导常常要我更改下界面,用美工给的图片取代系统图片.开始时,我只是给按钮等设置一下背景图片,这样做虽然美观了,但界面看起来却比较死板,比如用户点 ...

  9. Android菜鸟成长记8 -- 布局实践(微信界面的编写)

    前面我们简单的介绍了一下android的五大布局,那么现在我们来实践一下,写一个简单的微信界面 首先,我们新建一个weixin.xml的linnerlayout布局 我们日常使用的微信,从简单的方面来 ...

随机推荐

  1. 安装lua和openresty

    #### ubuntu 16.04 64bit 安装Lua luajit 及openresty 1 安装lua ,因为luajit 支持lua5.1较好.貌似不支持5.2和5.3作为学习,我就安装5. ...

  2. MVC部分视图含义

    Partail Views 类似于ASPX视图引擎中的用户控件,使用部分视图可以创建放置于不同页面的通用部分.

  3. 实例存储支持的AMI创建步骤

    实例存储支持的AMI创建步骤 一.Windows AMI 1. 选择实例存储支持的AMI创建实例. 2. 远程登录实例进行定制化配置. 3. 通过Web控制台或命令行Bundle实例(并自动上传到S3 ...

  4. (原)Android理论梳理-No1异步处理之Handler相关机制

    1 Handler的基本概念: 什么是handler? Handler是安卓系统的一种回调机制. handler的作用? 他的作用是用于不同线程之间的通讯.一是可以用于子线程与UI线程的数据通信,因为 ...

  5. Microsoft Visual Studio has encountered a problem

    VS 2010 断点调试的时候,一运行到断点就报这个错误"Visual Studio has encountered a problem and needs to close", ...

  6. 现代工程仿真CAE技术介绍

    随着现代科学技术的发展,人们正在不断建造更为快速的交通工具.更大规模的建筑物.更大跨度的桥梁.更大功率的发电机组和更为精密的机械设备.这一切都要求工程师在设计阶段就能精确地预测出产品和工程的技术性能, ...

  7. 对"QQGame-大家来找茬"的辅助工具的改进

    [前言]最近在博客园首页上看到有“大家来找茬”这个游戏(此游戏为找出两个相近图片的不同点)外挂的相关帖子,所以这里我也翻看了我之前(2009年5月)的写的一个简单的辅助程序(采用 VC6 开发的).我 ...

  8. spark1.3编译过程中遇到的一个坑

    在编译spark1.3.0时: export MAVEN_OPTS="-Xmx2g -XX:MaxPermSize=512M -XX:ReservedCodeCacheSize=512m&q ...

  9. session management

    The session does not created until the HttpServletRequest.getSession() method is called.

  10. iisnode托管node

    1.官方下载iisnode https://github.com/tjanczuk/iisnode 2.安装完成后在IIS中可见