1. 使用ArrayAdapter 来实现ListView
这种实现ListView 是最容易实现,但最不容易扩展的实现方法。
a、不借助生成的XML
public class ArrayAdapterDemoActivity extends Activity { private ListView listView = null; List<String> list = new ArrayList<String>(); //用一个ArrayList来存放数据 @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); //setContentView(R.layout.activity_array_adapter_demo); listView = new ListView(this); list = getData(); //获得数据 ArrayAdapter<String> arrayAdp = new ArrayAdapter<String>(this,android.R.layout.simple_expandable_list_item_1,list); listView.setAdapter(arrayAdp); setContentView(listView); listView.setOnItemClickListener(new OnItemClickListener() { @Override public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) { Toast.makeText(ArrayAdapterDemoActivity.this, "This is "+String.valueOf(list.get(arg2)), Toast.LENGTH_SHORT).show(); } }); } private List<String> getData(){ list.add("Jack"); list.add("Bob"); list.add("Theron"); return list; } }
首先实现了Activity类,重写了onCreate(Bundle savedInstanceState)方法,在方法内创建一个ListView的对象,
用一个ArrayList来存放需要显示的数据。使用listView.setAdapter(new ArrayAdapter<String>(this,android.R.layout.simple_expandable_list_item_1,list));来对ListView对象设置Adapter、布局和数据。其中android.R.layout.simple_expandable_list_item_1为Android自带默认的布局文件,list为设置的数据 。最后,使用setContentView(listView);将ListView设置到当前的Activity中。
当然,可以对ListView对象绑定事件监听器,这里使用了匿名内部类来对事件进行绑定,在onItemClick(AdapterView<?> arg0, View arg1, int arg2,long arg3)的方法内可以对需要实现的响应进行自己设置。
可以看到,上述的方式比较容易,但变化很小,每一个条目只能显示一行字。
b、在activity_main.xml中使用
<ListView android:id="@+id/listview" android:layout_width="fill_parent" android:layout_height="wrap_content" />
代码中使用:
setContentView(R.layout.activity_main); listView = (ListView)findViewById(R.id.listview);
就可以。其实跟上面一样,不过上面是在类中新建了个ListView对象,然后 setContentView(listView);到了activity_array_adapter_demo.xml配置文件中而已。
2、使用SimpleCursorAdapter来实现ListView
使用这种方式来实现ListView 的话,一般与手机的数据库需要结合使用,比如:从手机的通讯录中得到列表等。
同样不需要自己创建布局文件,使用Android 默认自带的即可。
package com.example.firstandroid; import java.util.ArrayList; import android.app.Activity; import android.database.Cursor; import android.os.Bundle; import android.provider.ContactsContract; import android.view.Menu; import android.view.View; import android.widget.AdapterView; import android.widget.AdapterView.OnItemClickListener; import android.widget.ListAdapter; import android.widget.ListView; import android.widget.SimpleCursorAdapter; import android.widget.Toast; public class SimpleCursorAdapterActivity extends Activity { private ListView listView; private Cursor cursor = null; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); //setContentView(R.layout.activity_simple_cursor_adapter); listView = new ListView(this); cursor = getContentResolver().query( ContactsContract.Contacts.CONTENT_URI, null, null, null, null);//设置一个扫描通讯录的游标 startManagingCursor(cursor);//启动游标 ListAdapter listAdapter = new SimpleCursorAdapter(this, android.R.layout.simple_expandable_list_item_1, cursor, new String[] { ContactsContract.Contacts.DISPLAY_NAME }, new int[] { android.R.id.text1 }); //SimpleCursorAdapter有五个参数,第一个是当前的Activity上下文对象; //第二个是ListView的布局文件,此处为默认的布局文件; //第三个是游标对象;第四个是ListView中每一列分别显示什么内容,这里显示的是名字; //第五个是每一列的样式id,此处为默认的样式 listView.setAdapter(listAdapter); //将SimpleCursorAdapter设置给ListView setContentView(listView);//将ListView显示在Activity上 listView.setOnItemClickListener(new OnItemClickListener() {//为ListView绑定事件监听器 @Override public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) { // TODO Auto-generated method stub Toast.makeText(SimpleCursorAdapterActivity.this, getList().get(arg2).getName()+":"+getList().get(arg2).getPhone(), Toast.LENGTH_SHORT) .show(); } }); } public ArrayList<Contactor> getList() {//从手机中获得通讯录的内容 ArrayList<Contactor> list = new ArrayList<Contactor>(); String[] columns = new String[] { ContactsContract.Contacts._ID,ContactsContract.Contacts.DISPLAY_NAME, ContactsContract.Contacts.HAS_PHONE_NUMBER }; Cursor cursor = SimpleCursorAdapterActivity.this.getContentResolver().query(ContactsContract.Contacts.CONTENT_URI, columns, null, null, null); while (cursor.moveToNext()) { Contactor bean = new Contactor(); bean.setName(cursor.getString(1)); //bean.setPhone(cursor.getString(1)); int hasPhoneNum = cursor.getInt(cursor.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER)); String contractId = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts._ID))+""; if(hasPhoneNum > 0){ Cursor phones = SimpleCursorAdapterActivity.this.getContentResolver() .query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, ContactsContract.CommonDataKinds.Phone.CONTACT_ID+"=?", new String[]{contractId}, null); String phoneNumber = ""; while(phones.moveToNext()){ phoneNumber += phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER)) + ","; } bean.setPhone(phoneNumber); } list.add(bean); } cursor.close(); return list; } @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.activity_simple_cursor_adapter, menu); return true; } class Contactor{//每个通讯录的人都是一个Contactor对象 String name; String phone; public String getName() { return name; } public void setName(String name) { this.name = name; } public String getPhone() { return phone; } public void setPhone(String phone) { this.phone = phone; } } }
上面有两个类,一个是 Contactor 类,是用于存放每个联系人的姓名和电话号码。另一个是继承了 Activity 的类,首先需要创建一个 Cursor 对象,用来扫描通讯录的内容,然后创建一个 SimpleCursorAdapter 对象,其构造函数需要 5 个参数,在上面程序中已经说明了。接着把 SimpleCursorAdapter 对象设置给 ListView 对象,最后把 ListView 在 Activity 上显示。
可以看出,使用 SimpleCursorAdapter 多用于对手机数据库的内容进行列表显示。
相关推荐
"ListView学习实例1"是针对这一主题的一个初步实践,旨在帮助开发者深入理解ListView的工作原理和使用方法。 首先,ListView的基本用法包括创建Adapter,Adapter是连接数据源和ListView的桥梁。它负责将数据转化为...
总之,"listView学习"这个demo将引导你全面理解Android中的ListView,包括Adapter的使用、布局设计、事件处理以及性能优化等多个方面。通过实际操作和调试,你将能够熟练地在自己的项目中应用ListView,提升用户体验...
本资源"Android源码——listView学习源码.zip"包含了对ListView工作原理的详细解析,以及可能的实践代码示例。 ListView的核心功能在于它可以动态加载和回收视图,以优化内存使用。当用户滚动列表时,ListView会...
在“Android 自己动手写ListView学习其原理 2”这个主题中,我们将深入探讨ListView的工作机制,理解其背后的原理,并通过实践来增强我们的Android开发技能。 首先,ListView的实现基于Adapter模式。Adapter是连接...
这份"Android listView学习源码.zip"提供了学习ListView使用和优化的基础示例,适合初学者深入理解其工作原理。 ListView的工作机制主要基于Adapter模式,Adapter是连接数据源和ListView的桥梁。在Android中,我们...
1. **ListView的基本使用**: - 创建ListView:在XML布局文件中添加`<ListView>`标签,设置ID以便在代码中引用。 - 设置Adapter:创建一个继承自BaseAdapter的自定义Adapter,实现其中的`getCount()`、`getItem()`...
这个"ListView学习系列源码"是一个非常适合初学者深入理解ListView工作原理和优化策略的资源。 首先,我们来了解ListView的基本结构。ListView由多个子视图(通常称为`ListView`的`Item`)组成,这些子视图由适配器...
在Android开发中,ListView是一种常用的视图组件,用于展示大量数据列表。...通过分析和学习这个Demo,开发者可以更好地理解和处理ListView的嵌套问题,提高用户体验,同时也能为其他复杂布局提供参考。
通过分析和运行这个demo,开发者可以学习到如何在实际项目中应用嵌套ListView,提升用户体验,特别是处理层级关系复杂的数据时。不过,需要注意的是,随着嵌套深度的增加,性能问题和复杂度也会相应提高,因此在设计...
通过对ListView源码的学习,我们可以深入了解其工作原理,解决性能问题,实现更复杂的交互效果,提升用户体验。同时,这也为理解和使用其他基于Adapter的控件(如GridView、RecyclerView)奠定了基础。
1. **ListView控件的基本介绍** ListView控件允许程序员在窗口小部件中以多种视图(如图标、列表、详细信息等)展示数据。它可以显示文件系统目录、数据库记录或其他任何类型的数据集。在VB中,ListView控件通常...
这个“Android listView学习源码.rar”压缩包很可能是为了帮助开发者深入理解ListView的工作原理,以及如何有效地使用和优化ListView。下面将详细讨论ListView的相关知识点。 1. **ListView基本使用**: - `...
通过分析和学习这个文件,开发者可以更好地理解如何在实际项目中应用这些技术。 总的来说,ListView嵌套GridView和ListView是Android开发中实现复杂布局的有效手段,它们结合自定义适配器和View复用机制,能够帮助...
在“ListView学习(二) 点击条目隐藏展开正文”这个主题中,我们将会深入探讨如何在ListView的每个条目上实现点击事件,以隐藏或展开对应的正文内容。这涉及到自定义Adapter、视图复用以及触摸事件处理等关键知识点...
这个"AndroidlistView学习源码.zip"压缩包显然包含了关于ListView使用的源代码示例,可以帮助开发者深入理解ListView的工作原理以及如何有效地进行自定义和优化。 1. **ListView基本使用**:ListView的基本用法包括...
1. 使用ViewHolder模式:这是一种提高ListView性能的常用技巧,通过缓存视图引用,减少查找子视图的时间。 2. 减少getView()的复杂性:避免在getView()中执行耗时操作,如网络请求、图片加载等。 3. 使用AsyncTask或...
ListView是Android平台上一种非常重要的控件,用于展示大量...通过不断的实践和学习,你可以创造出更加丰富和动态的列表效果。在提供的源码中,你应该能找到关于ListView实例的详细实现,进一步加深对ListView的理解。