步步为营_Android开发课[19]_用户界面之ListView(列表视图)
2015-04-08 22:30
645 查看
Focus on technology, enjoy life!—— QQ:804212028
浏览链接:/article/1513032.html
主题:用户界面之ListView(列表视图)
-ListView和TextView,Button等控件一样,一样的定义方式。但是Android开发中说道ListView就不得不说Adapter适配器,因为只有通过Adapter才可以把列表中的数据映射到ListView中。
创建一个ListView需要3个元素
(1)ListView中的每一列的View。
(2)填入View的数据或者图片等。
(3)连接数据与ListView的适配器。
常用适配器
[thead]
ListView结合ArrayAdapter适配器使用
activity_main.xml源代码:
MainActivity.java源代码:
运行结果:
ListView结合SimpleAdapter适配器使用
难道我们只满足在列表中只展示几个文字吗?我们向更加漂亮点,我们想在列表中加入图片。这时候使用SimpleAdapter的时候到了。SimpleAdapter的使用也非常简单,同时它的功能也非常强大。可以通过它自定义ListView中的item(item就是列表每一行的显示)的内容,比如图片、多选框等。看一个例子,实现一个每一行都有一个ImageView和TextView的ListView。
activity_main.xml源代码:
定义一个item的显示布局,也就是列表每一行怎么显示,来看源代码
item.xml源代码:
MainActivity.java源代码:
运行结果:
ListView结合BaseAdapter适配器使用
其实开发中最常用的还是BaseAdapter,尽管使用起来比其他适配器有些麻烦,但是使用它却能实现很多自己喜欢的列表布局,比如ListView、GridView、Gallery、Spinner等。它是直接继承自接口类Adapter的,使用BaseAdapter时需要重写很多方法,其中最重要的当属getView。
activity_main.xml源代码:
item.xml源代码:
MainActivity.java源代码:
运行结果:
Focus on technology, enjoy life!—— QQ:804212028
浏览链接:/article/1513032.html
浏览链接:/article/1513032.html
主题:用户界面之ListView(列表视图)
-ListView和TextView,Button等控件一样,一样的定义方式。但是Android开发中说道ListView就不得不说Adapter适配器,因为只有通过Adapter才可以把列表中的数据映射到ListView中。
创建一个ListView需要3个元素
(1)ListView中的每一列的View。
(2)填入View的数据或者图片等。
(3)连接数据与ListView的适配器。
常用适配器
Adapter | 含义 |
---|---|
ArrayAdapter | 用来绑定一个数组,支持泛型操作 |
SimpleAdapter | 用来绑定在xml中定义的控件对应的数据 |
SimpleCursorAdapter | 用来绑定游标得到的数据 |
BaseAdapter | 通用的基础适配器 |
activity_main.xml源代码:
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" > <ListView android:id="@+id/listView" android:layout_width="fill_parent" android:layout_height="wrap_content" /> </LinearLayout>
MainActivity.java源代码:
import android.app.Activity; import android.os.Bundle; import android.view.View; import android.widget.AdapterView; import android.widget.AdapterView.OnItemClickListener; import android.widget.ArrayAdapter; import android.widget.ListView; import android.widget.Toast; public class MainActivity extends Activity { private ListView listView; String[] str= new String[]{"aa","bb","cc","dd","ee"}; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); listView = (ListView)findViewById(R.id.listView); ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, str);; //上面android.R.layout.simple_list_item_1是系统自带的一种ListView布局方式 listView.setAdapter(adapter); listView.setOnItemClickListener(new OnItemClickListener(){ @Override public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) { // TODO Auto-generated method stub Toast.makeText(MainActivity.this, "你点击的是"+arg2, Toast.LENGTH_LONG).show(); } }); } }
运行结果:
ListView结合SimpleAdapter适配器使用
难道我们只满足在列表中只展示几个文字吗?我们向更加漂亮点,我们想在列表中加入图片。这时候使用SimpleAdapter的时候到了。SimpleAdapter的使用也非常简单,同时它的功能也非常强大。可以通过它自定义ListView中的item(item就是列表每一行的显示)的内容,比如图片、多选框等。看一个例子,实现一个每一行都有一个ImageView和TextView的ListView。
activity_main.xml源代码:
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" > <ListView android:id="@+id/listView" android:layout_width="fill_parent" android:layout_height="wrap_content" /> </LinearLayout>
定义一个item的显示布局,也就是列表每一行怎么显示,来看源代码
item.xml源代码:
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent"> <ImageView android:id="@+id/ItemImage" android:layout_alignParentRight="true" android:layout_width="wrap_content" android:layout_height="wrap_content" /> <TextView android:id="@+id/ItemTitle" android:layout_height="wrap_content" android:layout_width="fill_parent" android:textColor="#336699" android:textSize="20sp"/> <TextView android:id="@+id/ItemText" android:layout_height="wrap_content" android:layout_width="fill_parent" android:textColor="#336699" android:layout_below="@+id/ItemTitle"/> </RelativeLayout>
MainActivity.java源代码:
import java.util.ArrayList; import java.util.HashMap; import android.app.Activity; import android.os.Bundle; import android.view.View; import android.widget.AdapterView; import android.widget.AdapterView.OnItemClickListener; import android.widget.ListView; import android.widget.SimpleAdapter; import android.widget.Toast; public class MainActivity extends Activity { private ListView listView; private String[] mListTitle = { "姓名", "性别", "年龄", "居住地","邮箱"}; private String[] mListStr = { "aa","bb","cc","dd","ee" }; /*或者用这个,因为Map是个接口,HashMap是它的实现类 List<Map<String, Object>> listdata = new ArrayList<Map<String,Object>>(); for(int i=0; i<images.length; i++){ Map<String, Object> map = new HashMap<String, Object>(); map.put("myinfo", info[i]); map.put("myimages", images[i]); listdata.add(map); } SimpleAdapter adapter = new SimpleAdapter(this, listdata, R.layout.list, new String[] {"myinfo", "myimages"} , new int[] { R.id.myinfo, R.id.myimages }); lv.setAdapter(adapter); */ ArrayList<HashMap<String, Object>> itemData = new ArrayList<HashMap<String,Object>>(); @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); listView = (ListView)findViewById(R.id.listView); for(int i=0;i<mListTitle.length;i++){ HashMap<String,Object> item = new HashMap<String,Object>(); item.put("image", R.drawable.myimage); item.put("title", mListTitle[i]); item.put("text", mListStr[i]); itemData.add(item); } SimpleAdapter adapter = new SimpleAdapter(this, itemData, R.layout.item, new String[] {"image" ,"title", "text"}, new int[] {R.id.ItemImage,R.id.ItemTitle,R.id.ItemText}); listView.setAdapter(adapter); listView.setOnItemClickListener(new OnItemClickListener(){ @Override public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) { // TODO Auto-generated method stub Toast.makeText(MainActivity.this, "你点击的是"+arg2, Toast.LENGTH_LONG).show(); } }); } }
运行结果:
ListView结合BaseAdapter适配器使用
其实开发中最常用的还是BaseAdapter,尽管使用起来比其他适配器有些麻烦,但是使用它却能实现很多自己喜欢的列表布局,比如ListView、GridView、Gallery、Spinner等。它是直接继承自接口类Adapter的,使用BaseAdapter时需要重写很多方法,其中最重要的当属getView。
activity_main.xml源代码:
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" > <ListView android:id="@+id/listView" android:layout_width="fill_parent" android:layout_height="wrap_content" /> </LinearLayout>
item.xml源代码:
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent"> <ImageView android:id="@+id/ItemImage" android:layout_alignParentLeft="true" android:layout_width="wrap_content" android:layout_height="wrap_content" /> <TextView android:id="@+id/ItemTitle" android:layout_height="wrap_content" android:layout_width="fill_parent" android:layout_toRightOf="@id/ItemImage" android:textColor="#336699" android:textSize="20sp"/> <TextView android:id="@+id/ItemText" android:layout_height="wrap_content" android:layout_width="fill_parent" android:layout_toRightOf="@id/ItemImage" android:textColor="#336699" android:layout_below="@+id/ItemTitle"/> <Button android:id="@+id/ItemButton" android:layout_alignParentRight="true" android:layout_width="wrap_content" android:layout_height="wrap_content" /> </RelativeLayout>
MainActivity.java源代码:
import java.util.ArrayList; import java.util.HashMap; import android.app.Activity; import android.content.Context; import android.os.Bundle; import android.view.LayoutInflater; import android.view.View; import android.view.View.OnClickListener; import android.view.ViewGroup; import android.widget.AdapterView; import android.widget.AdapterView.OnItemClickListener; 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 MainActivity extends Activity { private ListView listView; private ArrayList<HashMap<String, Object>> data; private String[] mListTitle = { "姓名", "性别", "年龄", "居住地","邮箱"}; private String[] mListStr = { "aa","bb","cc","dd","ee" }; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //获取将要绑定的数据设置到data中 data = getData(); listView = (ListView)findViewById(R.id.listView); MyAdapter adapter = new MyAdapter(this); listView.setAdapter(adapter); } private ArrayList<HashMap<String, Object>> getData(){ ArrayList<HashMap<String, Object>> itemDate = new ArrayList<HashMap<String,Object>>(); /**为动态数组添加数据*/ for(int i=0;i<mListTitle.length;i++){ HashMap<String,Object> item = new HashMap<String,Object>(); item.put("ItemImage", R.drawable.myimage); item.put("ItemTitle", mListTitle[i]); item.put("ItemText", mListStr[i]); itemDate.add(item); } return itemDate; } private class MyAdapter extends BaseAdapter{ private LayoutInflater mInflater; public MyAdapter(Context context){ this.mInflater = LayoutInflater.from(context); } @Override public int getCount() { // TODO Auto-generated method stub return getData().size();//返回列表的行数 } @Override public Object getItem(int arg0) { // TODO Auto-generated method stub return null; } @Override public long getItemId(int arg0) { // TODO Auto-generated method stub return 0; } @Override public View getView(final int position, View convertView, ViewGroup parent) { // TODO Auto-generated method stub ViewHolder holder; if(convertView == null){ holder = new ViewHolder(); convertView = mInflater.inflate(R.layout.item, null); holder.imageView = (ImageView)convertView.findViewById(R.id.ItemImage); holder.title = (TextView)convertView.findViewById(R.id.ItemTitle); holder.text = (TextView)convertView.findViewById(R.id.ItemText); holder.bt = (Button)convertView.findViewById(R.id.ItemButton); //将设置好的布局保存到缓存中,并将其设置在Tag里,以便后面方便取出Tag convertView.setTag(holder); } else{ holder = (ViewHolder)convertView.getTag(); } /**设置TextView显示的内容,即我们存放在动态数组中的数据*/ holder.title.setText((String)data.get(position).get("ItemTitle")); holder.text.setText((String)data.get(position).get("ItemText")); holder.imageView.setImageResource((Integer)data.get(position).get("ItemImage")); /**为Button添加点击事件*/ holder.bt.setOnClickListener(new OnClickListener() { public void onClick(View v) { Toast.makeText(MainActivity.this, "你点击了---"+ position +"---按钮", Toast.LENGTH_LONG).show(); } }); return convertView; } } public final class ViewHolder{ public TextView title; public TextView text; public Button bt; public ImageView imageView; } }
运行结果:
Focus on technology, enjoy life!—— QQ:804212028
浏览链接:/article/1513032.html
相关文章推荐
- 步步为营_Android开发课[25]_用户界面之ScrollView(滚动视图)
- Android开发总结笔记 ListView(列表视图[中]) 1-3-2
- 步步为营_Android开发课[28]_用户界面之Spinner(下拉列表)
- 步步为营_Android开发课[15]_用户界面之TextView(文本视图)
- 步步为营_Android开发课[13]_用户界面之view(视图)
- android用户界面-组件Widget-列表视图ListView
- Android开发总结笔记 ListView(列表视图[上]) 1-3-1
- 步步为营_Android开发课[30]_用户界面之ViewFlipper(视图切换)
- Android开发总结笔记 ListView(列表视图[下]) 1-3-3
- 步步为营_Android开发课[35]_用户界面之WebView(网络视图)
- 步步为营_Android开发课[22]_用户界面之GridView(网格视图)
- 步步为营_Android开发课[16]_用户界面之EditText(编辑视图)
- android开发步步为营之5:ExpandableListView模拟QQ好友列表
- android用户界面-组件Widget-列表视图ListView
- Android列表视图(ListView--SimpleAdapter)学习
- android开发 列表显示(ListView)
- Android列表视图(ListView--SimpleCursorAdapter)学习
- Android列表视图(ListView--ArrayAdapter)学习
- 第28章、列表视图ListView之一(从零开始学Android)
- Android 应用开发笔记 - 列表(ListView)& SimpleAdapter