效果:

上图中ArrarAdapter是数组的适配器,CursorAdapter是游标适配器,用于操作数据库的数据。

ListView是垂直列表,数据源是集合或者数组,这些View都是安卓里的AdapterView的子类,都是支持适配器的View,AdapterView是通过Adapter(适配器类)像AdapterView的子类视图填充数据,BaseAdapter是所有适配器类的基类。适配器是MVC的C,View是V,数据是M,

activity_main.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent" > <ListView
android:id="@+id/lvGeneral"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:divider="#ccc"
android:dividerHeight="2dp"/> 分割线的高度 </RelativeLayout>

MainActivity.java

package com.sxt.day05_01;

import java.util.ArrayList;
import java.util.List; import com.sxt.day05_01.entity.GeneralBean; import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.TextView; public class MainActivity extends Activity {
ListView mlvGeneral;
List<GeneralBean> mGenerals;//代表十个军事家的集合
GeneralAdapter mAdapter;
int[] resid={//图片数组,
//里面存的是图片的id整型值
//public static final int baiqi=0x7f020000;
// public static final int caocao=0x7f020001;
R.drawable.baiqi,R.drawable.caocao,R.drawable.chengjisihan,
R.drawable.hanxin,R.drawable.lishimin,R.drawable.nuerhachi,
R.drawable.sunbin,R.drawable.sunwu,R.drawable.yuefei,
R.drawable.zhuyuanzhang
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initData();//初始化数据
initView();
} private void initView() {
mlvGeneral=(ListView) findViewById(R.id.lvGeneral);//main.xml中的ListView
mAdapter=new GeneralAdapter();//创建适配器
mlvGeneral.setAdapter(mAdapter);//关联适配器
} private void initData() {
//将资源中的字符串组数转换为Java数组,generals是int类型,代表strings.xml中定义的string数组<string-array/>标签
String[] names=getResources().getStringArray(R.array.generals);//getResources获取res资源,
/*
strings.xml
<resources>
<string name="app_name">Day05_01-ListViewDemo</string>
<string name="action_settings">Settings</string>
<string name="hello_world">Hello world!</string>
<string-array name="generals">
<item>白起</item>
<item>曹操</item>
<item>成吉思汗</item>
<item>韩信</item>
<item>李世民</item>
<item>努尔哈赤</item>
<item>孙膑</item>
<item>孙武</item>
<item>朱元璋</item>
<item>岳飞</item>
</string-array>
</resources>*/
mGenerals=new ArrayList<GeneralBean>();
for (int i = 0; i < names.length; i++) {
GeneralBean bean=new GeneralBean(resid[i], names[i]);
mGenerals.add(bean);
}
} //定义适配器
class GeneralAdapter extends BaseAdapter{ @Override
public int getCount() {//返回所有集合数据数组的长度
return mGenerals.size();
} @Override
public GeneralBean getItem(int position) {//返回某一行的数据
return mGenerals.get(position);
} @Override
public long getItemId(int position) {
return position;
} @Override
//返回ListView的一行给安卓系统,安卓系统拿到View后进行绘制,position某一行View在ListView的索引,convertView缓存当前列表中所有的列表项在内存中,比如数据有100个但是ListView只有10个则每次只显示10个,屏幕滚动的时候再显示后面的数据,但是每次屏幕只显示10个,
//parent就是ListView
public View getView(int position, View convertView, ViewGroup parent) {
//拿到ListViewItem的布局,转换为View类型的对象,item_generals是int类型,代表item_generals.xml文件
//返回行布局LinearLayout,将R.layout.item_generals布局转换为View的Java对象
View layout=View.inflate(MainActivity.this, R.layout.item_generals, null);
//找到显示军事家头像的ImageView,findViewById前面不加layout则在activity_main.xml中找,
ImageView ivThumb=(ImageView) layout.findViewById(R.id.ivThumb);
//找到显示军事家名字的TextView
TextView tvName=(TextView) layout.findViewById(R.id.tvName);
//获取军事中下标是position的军事家对象
GeneralBean bean=mGenerals.get(position);
//显示军事家头像
ivThumb.setImageResource(bean.getResid());
//显示军事家的姓名
tvName.setText(bean.getName()); return layout;//返回给安卓系统,则绘制一行,getView被调用getCount次,
} }
}
item_generals.xml
<?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="wrap_content"
android:orientation="horizontal" >
<ImageView
android:id="@+id/ivThumb"
android:layout_width="80dp"
android:layout_height="80dp"
android:src="@drawable/baiqi"/>
<TextView
android:id="@+id/tvName"
android:layout_width="wrap_content"
android:layout_height="80dp"
android:layout_marginLeft="10dp" 左边距离
android:text="白起"
android:textSize="20sp"
android:gravity="center_vertical"/> 内部垂直居中
</LinearLayout>

GeneralBean.java

public class GeneralBean {

    private int resid;//图片的id值
private String name;//军事家的姓名
public int getResid() {
return resid;
}
public void setResid(int resid) {
this.resid = resid;
}

android 27 ListView的更多相关文章

  1. 转--Android实现ListView过滤功能,继承于BaseAdapter,非ArrayAdapter。

    其实实现ListView过滤功能最方便的便是使用ArrayAdapter,里面自带的getFilter()方法能很方便的实现此功能,但是在实际的开发中,一般都是继承于BaseAdapter.还有一种是 ...

  2. Android的ListView异步加载图片时,错位、重复、闪烁问题的分析及解决方法

    Android ListView异步加载图片错位.重复.闪烁分析以及解决方案,具体问题分析以及解决方案请看下文. 我们在使用ListView异步加载图片的时候,在快速滑动或者网络不好的情况下,会出现图 ...

  3. 【android】listview改变选中行背景图片

    [android]listview改变选中行背景图片 目标:当item选中时,改变其背景图片.效果图如下: 直接在listview的xml文件中使用listselector: 1 2 3 4 5 6 ...

  4. android中listView下拉刷新

    Android的ListView是应用最广的一个组件,功能强大,扩展性灵活(不局限于ListView本身一个类),前面的文章有介绍分组,拖拽,3D立体,游标,圆角,而今天我们要介绍的是另外一个扩展Li ...

  5. Android—万能ListView适配器

    ListView是开发中最常用的控件了,但是总是会写重复的代码,浪费时间又没有意义. 最近参考一些资料,发现一个万能ListView适配器,代码量少,节省时间,总结一下分享给大家. 首先有一个自定义的 ...

  6. Android中ListView实现图文并列并且自定义分割线(完善仿微信APP)

    昨天的(今天凌晨)的博文<Android中Fragment和ViewPager那点事儿>中,我们通过使用Fragment和ViewPager模仿实现了微信的布局框架.今天我们来通过使用Li ...

  7. Android之ListView性能优化——一行代码绑定数据——万能适配器

    如下图,加入现在有一个这样的需求图,你会怎么做?作为一个初学者,之前我都是直接用SimpleAdapter结合一个Item的布局来实现的,感觉这样实现起来很方便(基本上一行代码就可以实现),而且也没有 ...

  8. Android中ListView的几种常见的优化方法

    Android中的ListView应该算是布局中几种最常用的组件之一了,使用也十分方便,下面将介绍ListView几种比较常见的优化方法: 首先我们给出一个没有任何优化的Listview的Adapte ...

  9. android——自定义listView

    都知道微信主机面 有个界面会一行一一行的聊天记录,那个效果就可以用listview来实现(当然这只是其中的一种) listView是一种比较常见的组件它用来展示列的view,它是根据数据的长度来显示数 ...

随机推荐

  1. EF自动生成的(T4模板) 关联属性元数据修改

    为了实现 T4模板关联属性 不要序列化的问题 就是要在具体的 关联属性上面添加一个元数据 这里利用以前的 Newtonsoft.Json 这个框架为例 效果应该为 就是要在关联属性上面添加元数据  [ ...

  2. Log4Net配置注意点

    log4Net的配置文章一搜一大把,配置使用还是有一些点花费了很多时间,这里整理一下,添上坑,让Developer走的更稳. 编程式配置路径 新建一个配置文件,通过写代码来动态加载log4Net的配置 ...

  3. Android Learning:数据存储方案归纳与总结

    前言 最近在学习<第一行android代码>和<疯狂android讲义>,我的感触是Android应用的本质其实就是数据的处理,包括数据的接收,存储,处理以及显示,我想针对这几 ...

  4. JDK源码阅读(五)java.io.Serializable接口

    package java.io; public interface Serializable { } (1)实现Serializable接口的类,将会被提示提供一个 serialVersionUID ...

  5. http server v0.1_http_parse.c

    #include <stdio.h> #include <string.h> #include <stdlib.h> #include "mime.h&q ...

  6. [BZOJ 1016] [JSOI2008] 最小生成树计数 【DFS】

    题目链接:BZOJ - 1016 题目分析 最小生成树的两个性质: 同一个图的最小生成树,满足: 1)同一种权值的边的个数相等 2)用Kruscal按照从小到大,处理完某一种权值的所有边后,图的连通性 ...

  7. 如何使用 Java 构建微服务?

    [编者按]微服务背后的大理念是将大型.复杂且历时长久的应用在架构上设计为内聚的服务,这些服务能够随着时间的流逝而演化.本文主要介绍了利用 Java 生态系统构建微服务的多种方法,并分析了每种方法的利弊 ...

  8. pfSense软路由防火墙

    才刚刚架起来,等着入门呀.. 想作网络的QOS限流这些的...

  9. bzoj2064

    这道题初看真的毫无思路,又是合并又是分裂的 但实际上我们知道,当两组和相等的时候才能由一组变成另一组 我们将初始状态和最终状态划分成若干对,每对中的两组元素和相等的 不难发现,最少步骤=n+m-2*对 ...

  10. Apache CloudStack多个跨站脚本漏洞(CVE-2013-2136)

    漏洞版本: Apache Group CloudStack 4.1.0 Apache Group CloudStack 4.0.2 Apache Group CloudStack 4.0.1-incu ...