一.ListView视图:
ListView 用来显示一个列表控件。
public class MainActivity extends ListActivity {
String[] str = {"中国","法国","英国","瑞士","奥地利","美国","印度","梵蒂冈"};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setListAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, str));
}
@Override
protected void onListItemClick(ListView l, View v, int position, long id) {
// TODO Auto-generated method stub
Toast.makeText(this,"你点击了"+str[position],Toast.LENGTH_SHORT).show();
}
}
这是实现的最基础的ListView列表:
MainActivity扩展了ListView类,而ListView类扩展了Activity类并且通过绑定到一个数据源来显示一个项列表。还要注意不用再布局文件中添加ListView控件,因为在ListView类中已经包含着一个ListView,在onCreate()方法中,使用setListAdapter()方法来用一个ListView以编程方式填充活动的整个屏幕。ArrayAdapter对象管理将由ListView显示的字符串数组。当点击了ListView中的一个列表选项时,将触发onListItemClick()方法,显示一条吐司信息。
运行图:
我们可以将要显示的字符串存储在strings.xml:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="app_name">ListViewTest</string>
<string name="action_settings">Settings</string>
<string name="hello_world">Hello world!</string>
<string-array name="str">
<item>中国</item>
<item>法国</item>
<item>英国</item>
<item>瑞士</item>
<item>奥地利</item>
<item>美国</item>
<item>印度</item>
<item>梵蒂冈</item>
<item>马尔代夫</item>
</string-array>
</resources>
MainActivity.java:
public class MainActivity extends ListActivity {
String[] str ;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
str = getResources().getStringArray(R.array.str);
setListAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, str));
}
@Override
protected void onListItemClick(ListView l, View v, int position, long id) {
// TODO Auto-generated method stub
Toast.makeText(this,"你点击了"+str[position],Toast.LENGTH_SHORT).show();
}
}
通过getResources()方法以编程方式来检索与应用程序捆绑的资源。
自定义ListView+自定义适配器(BaseAdapter):
ListView布局:
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content">
<TextView
android:id="@+id/textLeft"
android:layout_alignParentLeft="true"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
<TextView
android:id="@+id/textRight"
android:layout_alignParentRight="true"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
</RelativeLayout>
MainActivity.java:
public class MainActivity extends ListActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//设置一个Adapter,使用自定义的Adapter
setListAdapter(new TextImageAdapter(this));
}
private class TextImageAdapter extends BaseAdapter{
private Context mContext;
public TextImageAdapter(Context context) {
this.mContext=context;
}
/**
* 元素的个数
*/
public int getCount() {
return left.length;
}
public Object getItem(int position) {
return null;
}
public long getItemId(int position) {
return 0;
}
//用以生成在ListView中展示的一个个元素View
public View getView(int position, View convertView, ViewGroup parent) {
//优化ListView
if(convertView==null){
convertView=LayoutInflater.from(mContext).inflate(R.layout.activity_main, null);
ItemViewCache viewCache=new ItemViewCache();
viewCache.mTextLeft=(TextView)convertView.findViewById(R.id.textLeft);
viewCache.mTextRight=(TextView)convertView.findViewById(R.id.textRight);
convertView.setTag(viewCache);
}
ItemViewCache cache=(ItemViewCache)convertView.getTag();
//设置文本和图片,然后返回这个View,用于ListView的Item的展示
cache.mTextLeft.setText(left[position]);
cache.mTextRight.setText(Right[position]);
return convertView;
}
}
private static class ItemViewCache{
public TextView mTextLeft;
public TextView mTextRight;
}
//屏幕左边TextView
private String[] left=new String[]{"国家","省","地区"};
// 屏幕右边TextView
private String[] Right = new String[]{"中国","山东","滨州"};
}
这里我们自己定义了适配器,对于适配器后面我们会详细讲解。想添加列表的点击事件:
@Override
protected void onListItemClick(ListView l, View v, int position, long id) {
// TODO Auto-generated method stub
Toast.makeText(this, "你点击了"+left[position]+Right[position], Toast.LENGTH_SHORT).show();
}
运行效果: