ListView的简单使用
来源:互联网 发布:excel2007数据透视表 编辑:程序博客网 时间:2024/05/17 04:57
列表的显示需要三个元素:
1.ListVeiw 用来展示列表的View。
2.适配器 用来把数据映射到ListView上的中介。
3.数据 具体的将被映射的字符串,图片,或者基本组件。
根据列表的适配器类型,列表分为三种,ArrayAdapter,SimpleAdapter和SimpleCursorAdapter
ArrayAdapter:
其中以ArrayAdapter最为简单,只能展示一行字。SimpleAdapter有最好的扩充性,可以自定义出各种效果。SimpleCursorAdapter可以认为是SimpleAdapter对数据库的简单结合,可以方面的把数据库的内容以列表的形式展示出来。
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="match_parent" android:layout_height="match_parent"> <ListView android:id="@+id/list_view" android:layout_width="match_parent" android:layout_height="match_parent"/></LinearLayout>
MainActivity :
public class MainActivity extends AppCompatActivity { private String[] data = {"Apple","Banana","Orange","Watermelon","Pear"}; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); ArrayAdapter<String> arrayAdapter = new ArrayAdapter<String>(MainActivity.this, android.R.layout.simple_list_item_1,data); ListView listView = (ListView) findViewById(R.id.list_view); listView.setAdapter(arrayAdapter); }}
android.R.layout.simple_list_item_1,data是系统定义的布局文件,这个布局文件只显示一行文字
SimpleAdapter:
simpleAdapter的扩展性最好,可以定义各种各样的布局出来,可以放上ImageView(图片),还可以放上Button(按钮),CheckBox(复选框)等等。下面的代码都直接继承了ListActivity,ListActivity和普通的Activity没有太大的差别,不同就是对显示ListView做了许多优化,方面显示而已。
List_item.xml:
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent"> <ImageView android:id="@+id/img" android:layout_width="50dp" android:layout_height="50dp" android:layout_margin="5dp"/> <TextView android:id="@+id/title" android:layout_width="wrap_content" android:layout_height="wrap_content" /> <TextView android:id="@+id/info" android:layout_width="wrap_content" android:layout_height="wrap_content" /></LinearLayout>
MainActivity :
public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); SimpleAdapter adapter = new SimpleAdapter(this,getData(),R.layout.list_item, new String[]{"title","info","img"}, new int[]{R.id.title,R.id.info,R.id.img}); ListView listView = (ListView) findViewById(R.id.list_view); listView.setAdapter(adapter); } private 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("title","Google"); map.put("info","USA"); map.put("img",R.drawable.google); list.add(map); Map<String,Object> map2 = new HashMap<String,Object>(); map2.put("title","Microsoft"); map2.put("info","USA"); map2.put("img",R.drawable.microsoft); list.add(map2); Map<String,Object> map3 = new HashMap<String,Object>(); map3.put("title","Oracle"); map3.put("info","USA"); map3.put("img",R.drawable.oracle); list.add(map3); return list; }}
使用simpleAdapter的数据用一般都是HashMap构成的List,list的每一节对应ListView的每一行。HashMap的每个键值数据映射到布局文件中对应id的组件上。因为系统没有对应的布局文件可用,我们可以自己定义一个布局vlist.xml。下面做适配,new一个SimpleAdapter参数一次是:this,布局文件(vlist.xml),HashMap的 title 和 info,img。布局文件的组件id,title,info,img。布局文件的各组件分别映射到HashMap的各元素上,完成适配。
SimpleCursorAdapter:
方便把从游标得到的数据进行列表显示,并可以把指定的列映射到对应的TextView中。
下面的程序是从电话簿中把联系人显示到类表中。先在通讯录中添加一个联系人作为数据库的数据。然后获得一个指向数据库的Cursor并且定义一个布局文件(当然也可以使用系统自带的)。
MainActivity:
public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); ListView listView = (ListView) findViewById(R.id.list_view); Cursor cursor = getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null,null,null,null); ListAdapter adapter = new SimpleCursorAdapter(this,android.R.layout.simple_list_item_2, cursor, new String[]{ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME, ContactsContract.CommonDataKinds.Phone.NUMBER}, new int[]{android.R.id.text1,android.R.id.text2}); listView.setAdapter(adapter); }}
自定义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="match_parent" android:layout_height="match_parent"> <ListView android:id="@+id/list_view" android:layout_width="match_parent" android:layout_height="match_parent"/></LinearLayout>
fruit_item.xml:
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="horizontal" android:layout_width="match_parent" android:layout_height="match_parent"> <ImageView android:id="@+id/fruit_img" android:layout_width="wrap_content" android:layout_height="wrap_content" /> <TextView android:id="@+id/fruit_name" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginLeft="10dp"/></LinearLayout>
Fruit实体类:
public class Fruit { private String name; private int imageId; public Fruit(String name, int imageId) { this.name = name; this.imageId = imageId; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getImageId() { return imageId; } public void setImageId(int imageId) { this.imageId = imageId; }}
FruitAdapter:
public class FruitAdapter extends ArrayAdapter<Fruit>{ private int resourceId; public FruitAdapter(Context context, int resource, List<Fruit> objects) { super(context, resource, objects); resourceId = resource; } @Override public View getView(int position, View convertView, ViewGroup parent) { Fruit fruit = getItem(position); View view; ViewHolder viewHolder; if(convertView == null){ view = LayoutInflater.from(getContext()).inflate(resourceId,parent,false); viewHolder = new ViewHolder(); viewHolder.fruit_name = view.findViewById(R.id.fruit_name); viewHolder.fruit_img = view.findViewById(R.id.fruit_img); view.setTag(viewHolder);//将viewHolder对象存储在view中 }else{ view = convertView; viewHolder = (ViewHolder) view.getTag();//重新取出viewHolder对象 } viewHolder.fruit_name.setText(fruit.getName()); viewHolder.fruit_img.setImageResource(fruit.getImageId()); Log.d("FruitAdapter","getContent(): " + getContext().getClass().getName());//MainActivity Log.d("FruitAdapter","parent: " + parent.getClass().getName());//ListView Log.d("FruitAdapter","view: " + view.getClass().getName());//fruit_item return view; } class ViewHolder{ TextView fruit_name; ImageView fruit_img; }}
MainActivity:
public class MainActivity extends AppCompatActivity { private List<Fruit> fruitList = new ArrayList<Fruit>(); @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); initFruits(); // 初始化水果数据 FruitAdapter adapter = new FruitAdapter(MainActivity.this, R.layout.fruit_item, fruitList); ListView listView = (ListView) findViewById(R.id.list_view); listView.setAdapter(adapter); listView.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { Fruit fruit = fruitList.get(position); Toast.makeText(MainActivity.this, fruit.getName(), Toast.LENGTH_SHORT).show(); } }); } private void initFruits() { for (int i = 0; i < 2; i++) { Fruit apple = new Fruit("Apple", R.drawable.apple_pic); fruitList.add(apple); Fruit banana = new Fruit("Banana", R.drawable.banana_pic); fruitList.add(banana); Fruit orange = new Fruit("Orange", R.drawable.orange_pic); fruitList.add(orange); Fruit watermelon = new Fruit("Watermelon", R.drawable.watermelon_pic); fruitList.add(watermelon); Fruit pear = new Fruit("Pear", R.drawable.pear_pic); fruitList.add(pear); Fruit grape = new Fruit("Grape", R.drawable.grape_pic); fruitList.add(grape); Fruit pineapple = new Fruit("Pineapple", R.drawable.pineapple_pic); fruitList.add(pineapple); Fruit strawberry = new Fruit("Strawberry", R.drawable.strawberry_pic); fruitList.add(strawberry); Fruit cherry = new Fruit("Cherry", R.drawable.cherry_pic); fruitList.add(cherry); Fruit mango = new Fruit("Mango", R.drawable.mango_pic); fruitList.add(mango); } }}
- 简单的ListView使用
- ListView的简单使用
- listview的简单使用
- ListView的简单使用
- 简单的ListView使用
- ListView的简单使用
- ListView的简单使用
- ListView 的简单使用
- ListView的简单使用
- listview的简单使用
- ListView的简单使用
- ListView的简单使用
- ListView的简单使用
- listview的简单使用
- Android ListView的简单使用
- Android ListView的简单使用
- GridView、ListView的简单使用
- Android ListView 列表控件的简单使用
- Unable to find 'struts.multipart.saveDir'——Struts2报错解决
- hdu1085母函数模板
- 不止于技术
- 最小割方格取数总结,及题目总结
- linux查看本机IP、gateway、dns
- ListView的简单使用
- HashMap 源码分析
- 设计模式之单例模式
- java面经整理(4)
- 【帝国CMS】栏目标签代码带链接
- Java8系列之重新认识HashMap
- 反方向打印链表。(2)
- HLS协议全解
- 高精度乘法(正整数)