展会信息港展会大全

Android ListView初步
来源:互联网   发布日期:2015-11-26 16:22:33   浏览:1890次  

导读: 一、基本概念ListView相信大家一定不陌生,用了安卓手机也有一些时间了,我发现几乎所有的应用都用到了ListView,所以可见ListView是多么重要的一个组件。但是,感觉自己对...

一、基本概念

ListView相信大家一定不陌生,用了安卓手机也有一些时间了,我发现几乎所有的应用都用到了ListView,所以可见ListView是多么重要的一个组件。但是,感觉自己对它的掌握和理解还是差很多,于是根据开发经验以及网上的资料来写一篇文章整理对ListView的理解。

ListView

extends AbsListView

java.lang.Object

android.view.View

android.view.ViewGroup

android.widget.AdapterView<T extends android.widget.Adapter>

android.widget.AbsListView

android.widget.ListView

Known Direct Subclasses

ExpandableListView

ListView是一个显示一个垂直滚动列表中项目的视图,项目来自与此视图相关的ListAdapter。

XML属性:

(4)android:divider各个项目之间的分隔符,可以用Drawable 或者 color 来表示。

(2)android:dividerHeight divader的高度。

(3)android:entries对数组资源,的引用用来填充列表,事实上很多人用ArrayAdapter。

还用一个比较重要的方法就是SetAdapter()。当我们实例化一个ListView,然后就调用SetAdapter()方法来进行数据的绑定。其中Adapter一般有以下几种:ArrayAdapter,SimpleAdapter和SimpleCursorAdapter以及BaseAdapter。ArrayAdapter最为简单,只能展示一行字。SimpleAdapter有最好的扩充性,可以自定义出各种效果。SimpleCursorAdapter可以认为是SimpleAdapter对数据库的简单结合,可以方面的把数据库的内容以列表的形式展示出来。

二、实例

①用ListView来显示文本,点击文本进入另一个Activity。

我们用两种方法来实现,一个是用xml属性里的entries,另一个是ArrayAdapter。先用第一种方法,在values文件夹里面新建arrays.xml:

[html]

<SPAN style="FONT-SIZE: 14px"><?xml version="1.0" encoding="utf-8"?>

<resources>

<string-array name="listtext">

<item>安卓</item>

<item>苹果</item>

<item>WindowsPhone</item>

</string-array>

</resources></SPAN>

<?xml version="1.0" encoding="utf-8"?>

<resources>

<string-array name="listtext">

<item>安卓</item>

<item>苹果</item>

<item>WindowsPhone</item>

</string-array>

</resources> main.xml中添加ListView组件,如下:

[java]

<SPAN style="FONT-SIZE: 14px"><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"

xmlns:tools="http://schemas.android.com/tools"

android:layout_width="match_parent"

android:layout_height="match_parent"

tools:context=".ListViewDemo" >

<ListView

android:id="@+id/listview"

android:layout_width="match_parent"

android:entries="@array/listtext"//用来在ListView显示的文本

android:layout_height="match_parent" >

</ListView>

</RelativeLayout></SPAN>

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"

xmlns:tools="http://schemas.android.com/tools"

android:layout_width="match_parent"

android:layout_height="match_parent"

tools:context=".ListViewDemo" >

<ListView

android:id="@+id/listview"

android:layout_width="match_parent"

android:entries="@array/listtext"//用来在ListView显示的文本

android:layout_height="match_parent" >

</ListView>

</RelativeLayout>MainActivity.javaa如下:

[java]

<SPAN style="FONT-SIZE: 14px">package com.example.listviewdemo;

import java.util.ArrayList;

import java.util.HashMap;

import java.util.List;

import java.util.Map;

import android.os.Bundle;

import android.app.Activity;

import android.content.Intent;

import android.database.DataSetObserver;

import android.view.Menu;

import android.view.View;

import android.view.ViewGroup;

import android.widget.AdapterView;

import android.widget.AdapterView.OnItemClickListener;

import android.widget.ArrayAdapter;

import android.widget.ListAdapter;

import android.widget.ListView;

import android.widget.SimpleAdapter;

public class ListViewDemo extends Activity {

private ListView listView;

private Intent intent;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_list_view_demo);

listView=(ListView) findViewById(R.id.listview);

listView.setOnItemClickListener(new OnItemClickListener() {

@Override

public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,

long arg3) {

switch(arg2){

case 0:

intent=new Intent(ListViewDemo.this,OtherActivity.class);

startActivity(intent);

break;

case 1:

intent=new Intent(ListViewDemo.this,OtherActivity.class);

startActivity(intent);

case 2:

intent=new Intent(ListViewDemo.this,OtherActivity.class);

startActivity(intent);

}

}

});

}

@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_list_view_demo, menu);

return true;

}

}</SPAN>

package com.example.listviewdemo;

import java.util.ArrayList;

import java.util.HashMap;

import java.util.List;

import java.util.Map;

import android.os.Bundle;

import android.app.Activity;

import android.content.Intent;

import android.database.DataSetObserver;

import android.view.Menu;

import android.view.View;

import android.view.ViewGroup;

import android.widget.AdapterView;

import android.widget.AdapterView.OnItemClickListener;

import android.widget.ArrayAdapter;

import android.widget.ListAdapter;

import android.widget.ListView;

import android.widget.SimpleAdapter;

public class ListViewDemo extends Activity {

private ListView listView;

private Intent intent;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_list_view_demo);

listView=(ListView) findViewById(R.id.listview);

listView.setOnItemClickListener(new OnItemClickListener() {

@Override

public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,

long arg3) {

switch(arg2){

case 0:

intent=new Intent(ListViewDemo.this,OtherActivity.class);

startActivity(intent);

break;

case 1:

intent=new Intent(ListViewDemo.this,OtherActivity.class);

startActivity(intent);

case 2:

intent=new Intent(ListViewDemo.this,OtherActivity.class);

startActivity(intent);

}

}

});

}

@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_list_view_demo, menu);

return true;

}

}

另一种方式就是ArrayAdapter:

[java]

<SPAN style="FONT-SIZE: 14px">public class ListViewDemoextends Activity {

private ListView listView;

@Override

public void onCreate(Bundle savedInstanceState){

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_list_view_demo);

listView=(ListView) findViewById(R.id.listview);

listView.setAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_expandable_list_item_1,getData())); setContentView(listView); } private List<String> getData(){ List<String> data = new ArrayList<String>(); data.add("苹果"); data.add("安卓"); data.add("windowsphone"); return data;

}}</SPAN>

public class ListViewDemoextends Activity {

private ListView listView;

@Override

public void onCreate(Bundle savedInstanceState){

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_list_view_demo);

listView=(ListView) findViewById(R.id.listview);

listView.setAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_expandable_list_item_1,getData())); setContentView(listView); } private List<String> getData(){ List<String> data = new ArrayList<String>(); data.add("苹果"); data.add("安卓"); data.add("windowsphone"); return data;

}}

效果如下:

还有可以用SimpleAdapter和SimpleCursorAdapter往列表中添加图片等其他组件。simpleAdapter的扩展性最好,可以定义各种各样的布局出来,可以放上ImageView(图片),还可以放上Button(按钮),CheckBox(复选框)等等。SimpleCursorAdapter比SimpleAdapter多了一个可以从数据库查询数据并显示在ListView中。当然,我们最常用的还是BaseAdapter,可以根据需求来写我们自己的Adapter。下面这个例子就用到了BaseAdapter。用过安卓的用户都知道,像软件市场,微信对话里面都用到了ListView。比如软件Marcket里面基本上就是一个ListView,每一个item有一个软件,如图:

之前我们在ListView的item里面只是显示文本,这种情况比较适合在设置界面,那Marcket的item是如何实现的呢。无非也就是在item里面显示图片,文本以及按钮。

下面模仿这个效果做一下:

xml文件:

[java]

<SPAN style="FONT-SIZE: 14px"><?xml version="1.0" encoding="utf-8"?>

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"

android:layout_width="match_parent"

android:layout_height="match_parent" >

<LinearLayout

android:id="@+id/linear1"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:layout_alignParentLeft="true"

android:layout_marginLeft="10dp"

>

<ImageView

android:id="@+id/appimg"

android:layout_width="40dp"

android:layout_height="40dp"

/>

</LinearLayout>

<LinearLayout

android:id="@+id/linear2"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:layout_alignBottom="@+id/linear1"

android:layout_alignParentTop="true"

android:layout_marginLeft="5dp"

android:layout_toRightOf="@id/linear1"

android:orientation="vertical" >

<LinearLayout

android:id="@+id/sublinear1"

android:layout_width="wrap_content"

android:layout_height="wrap_content" >

<TextView

android:id="@+id/appnametext"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:text="@string/weixin"

/>

</LinearLayout>

<LinearLayout

android:id="@+id/sublinear2"

android:layout_marginTop="5dp"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:orientation="horizontal"

>

<TextView

android:id="@+id/sizetext"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:text="@string/weixinsize"

/>

<ImageView

android:id="@+id/slashimg"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:layout_marginLeft="3dp"

android:layout_marginRight="3dp"

android:src="@drawable/slash"

/>

<TextView

android:id="@+id/amounttext"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:text="@string/downamount"

/>

</LinearLayout>

</LinearLayout>

<LinearLayout

android:id="@+id/linear3"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:layout_alignParentRight="true"

android:layout_marginRight="10dp"

>

<Button

android:id="@+id/dowmbutton"

android:layout_width="wrap_content"

android:layout_height="35dp"

android:layout_marginTop="5dp"

android:text="@string/downapp" />

</LinearLayout>

</RelativeLayout></SPAN>

<?xml version="1.0" encoding="utf-8"?>

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"

android:layout_width="match_parent"

android:layout_height="match_parent" >

<LinearLayout

android:id="@+id/linear1"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:layout_alignParentLeft="true"

android:layout_marginLeft="10dp"

>

<ImageView

android:id="@+id/appimg"

android:layout_width="40dp"

android:layout_height="40dp"

/>

</LinearLayout>

<LinearLayout

android:id="@+id/linear2"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:layout_alignBottom="@+id/linear1"

android:layout_alignParentTop="true"

android:layout_marginLeft="5dp"

android:layout_toRightOf="@id/linear1"

android:orientation="vertical" >

<LinearLayout

android:id="@+id/sublinear1"

android:layout_width="wrap_content"

android:layout_height="wrap_content" >

<TextView

android:id="@+id/appnametext"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:text="@string/weixin"

/>

</LinearLayout>

<LinearLayout

android:id="@+id/sublinear2"

android:layout_marginTop="5dp"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:orientation="horizontal"

>

<TextView

android:id="@+id/sizetext"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:text="@string/weixinsize"

/>

<ImageView

android:id="@+id/slashimg"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:layout_marginLeft="3dp"

android:layout_marginRight="3dp"

android:src="@drawable/slash"

/>

<TextView

android:id="@+id/amounttext"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:text="@string/downamount"

/>

</LinearLayout>

</LinearLayout>

<LinearLayout

android:id="@+id/linear3"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:layout_alignParentRight="true"

android:layout_marginRight="10dp"

>

<Button

android:id="@+id/dowmbutton"

android:layout_width="wrap_content"

android:layout_height="35dp"

android:layout_marginTop="5dp"

android:text="@string/downapp" />

</LinearLayout>

</RelativeLayout>Activity代码如下:

[java]

<SPAN style="FONT-SIZE: 14px">package com.example.listviewdemo;

import java.util.ArrayList;

import java.util.HashMap;

import java.util.List;

import java.util.Map;

import android.os.Bundle;

import android.app.Activity;

import android.content.Context;

import android.content.Intent;

import android.database.DataSetObserver;

import android.view.LayoutInflater;

import android.view.Menu;

import android.view.View;

import android.view.ViewGroup;

import android.widget.AdapterView;

import android.widget.AdapterView.OnItemClickListener;

import android.widget.ArrayAdapter;

import android.widget.BaseAdapter;

import android.widget.Button;

import android.widget.ImageView;

import android.widget.ListAdapter;

import android.widget.ListView;

import android.widget.SimpleAdapter;

import android.widget.TextView;

public class ListViewDemo extends Activity {

private ListView listView;

private Intent intent;

private List<Map<String, Object>> mData;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_list_view_demo);

listView = (ListView) findViewById(R.id.listview);

SimpleAdapter simpleAdapter = new SimpleAdapter(this, getData(),

R.layout.item, new String[] { "nametext", "teitext",

"amounttext" }, new int[] { R.id.name_text,

R.id.tel_text, R.id.image });

listView.setAdapter(simpleAdapter);

mData = getData();

MyAdapter adapter = new MyAdapter(this);

listView.setAdapter(adapter);

}

public List<Map<String, Object>> getData() {

List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();

Map<String, Object> map = new HashMap<String, Object>();

map.put("appnametext", "微信");

map.put("sizetext", "15.2");

map.put("amounttext", "1234323");

map.put("appimg", R.drawable.weixin);

list.add(map);

map = new HashMap<String, Object>();

map.put("appnametext", "手机QQ");

map.put("sizetext", "8.5");

map.put("amounttext", "122073323");

map.put("appimg", R.drawable.qq);

list.add(map);

map = new HashMap<String, Object>();

map.put("appnametext", "手机QQ空间");

map.put("sizetext", "6.3");

map.put("amounttext", "122393");

map.put("appimg", R.drawable.qqko);

list.add(map);

map = new HashMap<String, Object>();

map.put("appnametext", "微博");

map.put("sizetext", "7.7");

map.put("amounttext", "1278323");

map.put("appimg", R.drawable.weib);

list.add(map);

map = new HashMap<String, Object>();

map.put("appnametext", "陌陌");

map.put("sizetext", "6.9");

map.put("amounttext", "1279073");

map.put("appimg", R.drawable.mom);

list.add(map);

map = new HashMap<String, Object>();

map.put("appnametext", "飞信");

map.put("sizetext", "6.9");

map.put("amounttext", "1279073");

map.put("appimg", R.drawable.fei);

list.add(map);

return list;

}

public final class ViewHolder {

public ImageView appimg;

public TextView appnametext;

public TextView sizetext;

public TextView amounttext;

public Button dowmbutton;

}

public class MyAdapter extends BaseAdapter {

private LayoutInflater mInflater;

public MyAdapter(Context context) {

this.mInflater = LayoutInflater.from(context);

}

@Override

public int getCount() {

return mData.size();

}

@Override

public Object getItem(int arg0) {

return null;

}

@Override

public long getItemId(int arg0) {

return 0;

}

@Override

public View getView(int arg0, View arg1, ViewGroup arg2) {

ViewHolder holder = null;

if (arg1 == null) {

holder = new ViewHolder();

arg1 = mInflater.inflate(R.layout.item1, null);

holder.appimg = (ImageView) arg1.findViewById(R.id.appimg);

holder.appnametext = (TextView) arg1.findViewById(R.id.appnametext);

holder.sizetext = (TextView) arg1.findViewById(R.id.sizetext);

holder.amounttext = (TextView) arg1.findViewById(R.id.amounttext);

holder.dowmbutton = (Button) arg1.findViewById(R.id.dowmbutton);

arg1.setTag(holder);

} else {

holder = (ViewHolder) arg1.getTag();

}

holder.appimg.setBackgroundResource((Integer) mData.get(arg0).get("appimg"));

holder.appnametext.setText((String) mData.get(arg0).get("appnametext"));

holder.sizetext.setText((String) mData.get(arg0).get("sizetext"));

holder.amounttext.setText((String) mData.get(arg0).get("amounttext"));

return arg1;

}

}

}</SPAN>

package com.example.listviewdemo;

import java.util.ArrayList;

import java.util.HashMap;

import java.util.List;

import java.util.Map;

import android.os.Bundle;

import android.app.Activity;

import android.content.Context;

import android.content.Intent;

import android.database.DataSetObserver;

import android.view.LayoutInflater;

import android.view.Menu;

import android.view.View;

import android.view.ViewGroup;

import android.widget.AdapterView;

import android.widget.AdapterView.OnItemClickListener;

import android.widget.ArrayAdapter;

import android.widget.BaseAdapter;

import android.widget.Button;

import android.widget.ImageView;

import android.widget.ListAdapter;

import android.widget.ListView;

import android.widget.SimpleAdapter;

import android.widget.TextView;

public class ListViewDemo extends Activity {

private ListView listView;

private Intent intent;

private List<Map<String, Object>> mData;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_list_view_demo);

listView = (ListView) findViewById(R.id.listview);

SimpleAdapter simpleAdapter = new SimpleAdapter(this, getData(),

R.layout.item, new String[] { "nametext", "teitext",

"amounttext" }, new int[] { R.id.name_text,

R.id.tel_text, R.id.image });

listView.setAdapter(simpleAdapter);

mData = getData();

MyAdapter adapter = new MyAdapter(this);

listView.setAdapter(adapter);

}

public List<Map<String, Object>> getData() {

List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();

Map<String, Object> map = new HashMap<String, Object>();

map.put("appnametext", "微信");

map.put("sizetext", "15.2");

map.put("amounttext", "1234323");

map.put("appimg", R.drawable.weixin);

list.add(map);

map = new HashMap<String, Object>();

map.put("appnametext", "手机QQ");

map.put("sizetext", "8.5");

map.put("amounttext", "122073323");

map.put("appimg", R.drawable.qq);

list.add(map);

map = new HashMap<String, Object>();

map.put("appnametext", "手机QQ空间");

map.put("sizetext", "6.3");

map.put("amounttext", "122393");

map.put("appimg", R.drawable.qqko);

list.add(map);

map = new HashMap<String, Object>();

map.put("appnametext", "微博");

map.put("sizetext", "7.7");

map.put("amounttext", "1278323");

map.put("appimg", R.drawable.weib);

list.add(map);

map = new HashMap<String, Object>();

map.put("appnametext", "陌陌");

map.put("sizetext", "6.9");

map.put("amounttext", "1279073");

map.put("appimg", R.drawable.mom);

list.add(map);

map = new HashMap<String, Object>();

map.put("appnametext", "飞信");

map.put("sizetext", "6.9");

map.put("amounttext", "1279073");

map.put("appimg", R.drawable.fei);

list.add(map);

return list;

}

public final class ViewHolder {

public ImageView appimg;

public TextView appnametext;

public TextView sizetext;

public TextView amounttext;

public Button dowmbutton;

}

public class MyAdapter extends BaseAdapter {

private LayoutInflater mInflater;

public MyAdapter(Context context) {

this.mInflater = LayoutInflater.from(context);

}

@Override

public int getCount() {

return mData.size();

}

@Override

public Object getItem(int arg0) {

return null;

}

@Override

public long getItemId(int arg0) {

return 0;

}

@Override

public View getView(int arg0, View arg1, ViewGroup arg2) {

ViewHolder holder = null;

if (arg1 == null) {

holder = new ViewHolder();

arg1 = mInflater.inflate(R.layout.item1, null);

holder.appimg = (ImageView) arg1.findViewById(R.id.appimg);

holder.appnametext = (TextView) arg1.findViewById(R.id.appnametext);

holder.sizetext = (TextView) arg1.findViewById(R.id.sizetext);

holder.amounttext = (TextView) arg1.findViewById(R.id.amounttext);

holder.dowmbutton = (Button) arg1.findViewById(R.id.dowmbutton);

arg1.setTag(holder);

} else {

holder = (ViewHolder) arg1.getTag();

}

holder.appimg.setBackgroundResource((Integer) mData.get(arg0).get("appimg"));

holder.appnametext.setText((String) mData.get(arg0).get("appnametext"));

holder.sizetext.setText((String) mData.get(arg0).get("sizetext"));

holder.amounttext.setText((String) mData.get(arg0).get("amounttext"));

return arg1;

}

}

}

效果如下:

虽然效果达到了,但是我们这只是一个本地的显示,实际应用中都是从网络上下载然后展示的。流程应该是从数据库中获取数据,然后封装成josn或xml,之后安卓端异步解析并且显示。关于ListView还有很多要说的东西,优化,分页加载,下拉刷新等等。

[java]

<PRE></PRE>

<PRE></PRE>

<PRE></PRE>

<PRE></PRE>

<PRE></PRE

赞助本站

人工智能实验室

相关热词: android开发 教程

AiLab云推荐
展开

热门栏目HotCates

Copyright © 2010-2024 AiLab Team. 人工智能实验室 版权所有    关于我们 | 联系我们 | 广告服务 | 公司动态 | 免责声明 | 隐私条款 | 工作机会 | 展会港