Android开发中,我们常使用到ListView视图,下面介绍ListView的几种使用方法。
主界面
首先,在主界面上添加几个按钮,用于界面跳转。
界面布局:
源码:
package com.example.listviewdemo;
import android.os.Bundle;
import android.view.View;
import android.app.Activity;
import android.content.Intent;
public class MainActivity extends Activity{
@Override protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
public void Button1(View v) {
Intent intent = new Intent();
intent.setClass(MainActivity.this, Activity01.class);
startActivity(intent);
}
public void Button2(View v) {
Intent intent = new Intent();
intent.setClass(MainActivity.this, Activity02.class);
startActivity(intent);
}
public void Button3(View v) {
Intent intent = new Intent();
intent.setClass(MainActivity.this, Activity03.class);
startActivity(intent);
}
public void Button4(View v) {
Intent intent = new Intent();
intent.setClass(MainActivity.this, SimpleList.class);
startActivity(intent);
}
public void Button5(View v) {
Intent intent = new Intent();
intent.setClass(MainActivity.this, TitleList.class);
startActivity(intent);
}
public void Button6(View v) {
Intent intent = new Intent();
intent.setClass(MainActivity.this, IconList.class);
startActivity(intent);
}
public void Button7(View v) {
Intent intent = new Intent();
intent.setClass(MainActivity.this, ColorList.class);
startActivity(intent);
}
public void Button8(View v) {
Intent intent = new Intent();
intent.setClass(MainActivity.this, ArrayList.class);
startActivity(intent);
}
public void Button9(View v) {
Intent intent = new Intent();
intent.setClass(MainActivity.this, MyTest.class);
startActivity(intent);
}
}
效果:
使用ListView设置界面
package com.example.listviewdemo;
import java.util.ArrayList;
import java.util.List;
import android.app.Activity;
import android.os.Bundle;
import android.widget.ArrayAdapter;
import android.widget.ListView;
public class Activity01 extends Activity{
private ListView listView;
@Override protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
listView = new ListView(this);
listView.setAdapter(new ArrayAdapter(this, android.R.layout.simple_expandable_list_item_1,getData()));
setContentView(listView);
}
private ListgetData(){
Listdata = new ArrayList ();
data.add("测试数据1");
data.add("测试数据2");
data.add("测试数据3");
data.add("测试数据4");
return data;
}
}
效果
使用SimpleAdapter设置界面
package com.example.listviewdemo;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import android.app.ListActivity;
import android.os.Bundle;
import android.widget.SimpleAdapter;
public class Activity02 extends ListActivity{
@Override protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
SimpleAdapter adapter = new SimpleAdapter(this,getData(),R.layout.vlist, new String[]{
"title","info","img"}
, new int[]{
R.id.title,R.id.info,R.id.img}
);
setListAdapter(adapter);
}
private List
vlist布局
效果
使用MyAdapter设置界面
package com.example.listviewdemo;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import android.app.AlertDialog;
import android.app.ListActivity;
import android.content.Context;
import android.content.DialogInterface;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;
public class Activity03 extends ListActivity{
private List> mData;
@Override protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mData = getData();
MyAdapter adapter = new MyAdapter(this);
setListAdapter(adapter);
}
private List> getData() {
List> list = new ArrayList >();
Mapmap = new HashMap ();
map.put("title", "标题1");
map.put("info", "内容1");
map.put("img", R.drawable.icon_marka);
list.add(map);
map = new HashMap();
map.put("title", "标题2");
map.put("info", "内容2");
map.put("img", R.drawable.icon_markb);
list.add(map);
map = new HashMap();
map.put("title", "标题3");
map.put("info", "内容3");
map.put("img", R.drawable.icon_markc);
list.add(map);
return list;
}
@Override protected void onListItemClick(ListView l, View v, int position, long id) {
String string = "click" + (String)mData.get(position).get("title");
Toast.makeText(this, string, Toast.LENGTH_SHORT).show();
}
public void showInfo() {
new AlertDialog.Builder(this) .setTitle("我的listview") .setMessage("介绍...") .setPositiveButton("确定", new DialogInterface.OnClickListener() {
@Override public void onClick(DialogInterface dialog, int which) {
}
}
) .show();
}
public final class ViewHolder {
public ImageView img;
public TextView title;
public TextView info;
public Button viewBtn;
}
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 position, View convertView, ViewGroup parent) {
ViewHolder holder = null;
if (convertView == null) {
holder=new ViewHolder();
convertView = mInflater.inflate(R.layout.vlist2, null);
holder.img = (ImageView)convertView.findViewById(R.id.img);
holder.title = (TextView)convertView.findViewById(R.id.title);
holder.info = (TextView)convertView.findViewById(R.id.info);
holder.viewBtn = (Button)convertView.findViewById(R.id.view_btn);
convertView.setTag(holder);
}
else {
holder = (ViewHolder)convertView.getTag();
}
holder.img.setBackgroundResource((Integer)mData.get(position).get("img"));
holder.title.setText((String)mData.get(position).get("title"));
holder.info.setText((String)mData.get(position).get("info"));
holder.viewBtn.setOnClickListener(new View.OnClickListener() {
@Override public void onClick(View v) {
showInfo();
}
}
);
return convertView;
}
}
}
vlist2布局
效果
使用ListActivity设置一行内容界面
package com.example.listviewdemo;
import android.app.ListActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.Toast;
import android.widget.AdapterView.OnItemClickListener;
public class SimpleList extends ListActivity{
private String[] mListStr = {
"标题1:内容1","标题2:内容2","标题3:内容3","标题4:内容4"}
;
ListView mListView = null;
@Override protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mListView = getListView();
setListAdapter(new ArrayAdapter(this,android.R.layout.simple_list_item_1, mListStr));
mListView.setOnItemClickListener(new OnItemClickListener() {
@Override public void onItemClick(AdapterView adapterView, View view, int position,long id) {
Toast.makeText(SimpleList.this,"您选择了" + mListStr[position], Toast.LENGTH_LONG).show();
}
}
);
}
}
效果
使用ListActivity设置两行内容界面
package com.example.listviewdemo;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;
import android.app.ListActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ListView;
import android.widget.SimpleAdapter;
import android.widget.Toast;
import android.widget.AdapterView.OnItemClickListener;
public class TitleList extends ListActivity{
private String[] mListTitle = {
"标题1", "标题2", "标题3", "标题4", "标题5"}
;
private String[] mListStr = {
"内容1", "内容2", "内容3", "内容4", "内容5" }
;
ListView mListView = null;
ArrayList> mData= new ArrayList >();
@Override protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mListView = getListView();
int lengh = mListTitle.length;
for(int i =0;
i < lengh;
i++) {
Mapitem = new HashMap ();
item.put("title", mListTitle[i]);
item.put("text", mListStr[i]);
mData.add(item);
}
SimpleAdapter adapter = new SimpleAdapter(this,mData,android.R.layout.simple_list_item_2, new String[]{
"title","text"}
,new int[]{
android.R.id.text1,android.R.id.text2}
);
setListAdapter(adapter);
mListView.setOnItemClickListener(new OnItemClickListener() {
@Override public void onItemClick(AdapterView adapterView, View view, int position,long id) {
Toast.makeText(TitleList.this,"您选择了标题:" + mListTitle[position] + "内容:"+mListStr[position], Toast.LENGTH_LONG).show();
}
}
);
}
}
效果
使用ListActivity设置图标和两行内容界面
package com.example.listviewdemo;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;
import android.app.ListActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ListView;
import android.widget.SimpleAdapter;
import android.widget.Toast;
import android.widget.AdapterView.OnItemClickListener;
public class IconList extends ListActivity{
private String[] mListTitle = {
"标题1", "标题2", "标题3", "标题4", "标题5"}
;
private String[] mListStr = {
"内容1", "内容2", "内容3", "内容4", "内容5" }
;
ListView mListView = null;
ArrayList> mData= new ArrayList >();
@Override protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mListView = getListView();
int lengh = mListTitle.length;
for(int i =0;
i < lengh;
i++) {
Mapitem = new HashMap ();
item.put("image", R.drawable.ic_launcher);
item.put("title", mListTitle[i]);
item.put("text", mListStr[i]);
mData.add(item);
}
SimpleAdapter adapter = new SimpleAdapter(this,mData,R.layout.iconlist, new String[]{
"image","title","text"}
,new int[]{
R.id.image,R.id.title,R.id.text}
);
setListAdapter(adapter);
mListView.setOnItemClickListener(new OnItemClickListener() {
@Override public void onItemClick(AdapterView adapterView, View view, int position,long id) {
Toast.makeText(IconList.this,"您选择了标题:" + mListTitle[position] + "内容:"+mListStr[position], Toast.LENGTH_LONG).show();
}
}
);
}
}
iconlist布局
效果
使用ListActivity设置背景图标文字效果
package com.example.listviewdemo;
import android.app.ListActivity;
import android.content.Context;
import android.graphics.Color;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;
import android.widget.AdapterView.OnItemClickListener;
public class ColorList extends ListActivity{
private String[] mListTitle = {
"标题1", "标题2", "标题3", "标题4", "标题5"}
;
private String[] mListStr = {
"内容1", "内容2", "内容3", "内容4", "内容5" }
;
ListView mListView = null;
MyListAdapter myAdapter = null;
@Override protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mListView = getListView();
myAdapter = new MyListAdapter(this);
setListAdapter(myAdapter);
mListView.setOnItemClickListener(new OnItemClickListener() {
@Override public void onItemClick(AdapterView adapterView, View view, int position,long id) {
View v=adapterView.getChildAt(position);
v.setBackgroundColor(Color.RED);
Toast.makeText(ColorList.this,"您选择了" + mListStr[position], Toast.LENGTH_LONG).show();
}
}
);
}
class MyListAdapter extends BaseAdapter {
private int[] colors = new int[] {
0xff626569, 0xff4f5257 }
;
public MyListAdapter(Context context) {
mContext = context;
}
public int getCount() {
return mListStr.length;
}
@Override public boolean areAllItemsEnabled() {
return false;
}
public Object getItem(int position) {
return position;
}
public long getItemId(int position) {
return position;
}
public View getView(int position, View convertView, ViewGroup parent) {
ImageView iamge = null;
TextView title = null;
TextView text = null;
if (convertView == null) {
convertView = LayoutInflater.from(mContext).inflate(R.layout.colorlist, null);
iamge = (ImageView) convertView.findViewById(R.id.color_image);
title =(TextView) convertView.findViewById(R.id.color_title);
text= (TextView) convertView.findViewById(R.id.color_text);
}
int colorPos = position % colors.length;
convertView.setBackgroundColor(colors[colorPos]);
title.setText(mListTitle[position]);
text.setText(mListStr[position]);
iamge.setImageResource(R.drawable.icon_gcoding);
return convertView;
}
private Context mContext;
}
}
colorlist布局
效果
使用ListActivity设置背景按钮图标文字效果
package com.example.listviewdemo;
import android.app.ListActivity;
import android.content.Context;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.View.OnClickListener;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;
public class ArrayList extends ListActivity{
private String[] mListTitle = {
"标题1", "标题2", "标题3", "标题4", "标题5"}
;
private String[] mListStr = {
"内容1", "内容2", "内容3", "内容4", "内容5" }
;
ListView mListView = null;
MyListAdapter myAdapter = null;
ArrayList arrayList = null;
@Override protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
arrayList = this;
mListView = getListView();
myAdapter = new MyListAdapter(this,R.layout.arraylist);
setListAdapter(myAdapter);
}
public class MyListAdapter extends ArrayAdapter
arraylist布局
效果
使用ListView设置界面跳转
第一个界面
package com.example.listviewdemo;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.BaseAdapter;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.AdapterView.OnItemClickListener;
public class MyTest extends Activity{
private ListView listView;
@Override protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
listView = new ListView(this);
listView.setAdapter(new DemoListAdapter());
setContentView(listView);
listView.setOnItemClickListener(new OnItemClickListener() {
@Override public void onItemClick(AdapterView adapterView, View view, int position,long id) {
onListItemClick(position);
}
}
);
}
void onListItemClick(int index) {
Intent intent = null;
intent = new Intent(this,demos[index].demoClass);
startActivity(intent);
}
private static final DemoInfo[] demos = {
new DemoInfo(R.string.title1, R.string.content1, MyTest2.class), new DemoInfo(R.string.title2, R.string.content2, MyTest2.class), new DemoInfo(R.string.title3, R.string.content3, MyTest2.class), }
;
private class DemoListAdapter extends BaseAdapter {
public DemoListAdapter() {
super();
}
@Override public View getView(int position, View convertView, ViewGroup parent) {
convertView = View.inflate(MyTest.this, R.layout.list, null);
TextView title = (TextView)convertView.findViewById(R.id.title);
TextView desc = (TextView)convertView.findViewById(R.id.info);
title.setText(demos[position].title);
desc.setText(demos[position].desc);
return convertView;
}
@Override public int getCount() {
return demos.length;
}
@Override public Object getItem(int position) {
return demos[position];
}
@Override public long getItemId(int position) {
return position;
}
}
private static class DemoInfo {
private final int title;
private final int desc;
private final Class demoClass;
public DemoInfo(int title, int desc, Class demoClass) {
this.title = title;
this.desc = desc;
this.demoClass = demoClass;
}
}
}
第二个界面
package com.example.listviewdemo;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
public class MyTest2 extends Activity{
@Override protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
View view = new View(this);
setContentView(view);
}
}
list布局
效果