`
uule
  • 浏览: 6359459 次
  • 性别: Icon_minigender_1
  • 来自: 一片神奇的土地
社区版块
存档分类
最新评论

ListView学习1

 
阅读更多

160多个android开源代码汇总

 

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 多用于对手机数据库的内容进行列表显示。



  • 大小: 9 KB
  • 大小: 75.3 KB
  • 大小: 101.8 KB
分享到:
评论

相关推荐

    ListView学习实例1

    "ListView学习实例1"是针对这一主题的一个初步实践,旨在帮助开发者深入理解ListView的工作原理和使用方法。 首先,ListView的基本用法包括创建Adapter,Adapter是连接数据源和ListView的桥梁。它负责将数据转化为...

    listview学习

    总之,"listView学习"这个demo将引导你全面理解Android中的ListView,包括Adapter的使用、布局设计、事件处理以及性能优化等多个方面。通过实际操作和调试,你将能够熟练地在自己的项目中应用ListView,提升用户体验...

    Android源码——listView学习源码.zip

    本资源"Android源码——listView学习源码.zip"包含了对ListView工作原理的详细解析,以及可能的实践代码示例。 ListView的核心功能在于它可以动态加载和回收视图,以优化内存使用。当用户滚动列表时,ListView会...

    Android 自己动手写ListView学习其原理 2

    在“Android 自己动手写ListView学习其原理 2”这个主题中,我们将深入探讨ListView的工作机制,理解其背后的原理,并通过实践来增强我们的Android开发技能。 首先,ListView的实现基于Adapter模式。Adapter是连接...

    Android listView学习源码.zip

    这份"Android listView学习源码.zip"提供了学习ListView使用和优化的基础示例,适合初学者深入理解其工作原理。 ListView的工作机制主要基于Adapter模式,Adapter是连接数据源和ListView的桥梁。在Android中,我们...

    ListView学习(一)-ListView使用例子

    1. **ListView的基本使用**: - 创建ListView:在XML布局文件中添加`&lt;ListView&gt;`标签,设置ID以便在代码中引用。 - 设置Adapter:创建一个继承自BaseAdapter的自定义Adapter,实现其中的`getCount()`、`getItem()`...

    ListView学习系列源码

    这个"ListView学习系列源码"是一个非常适合初学者深入理解ListView工作原理和优化策略的资源。 首先,我们来了解ListView的基本结构。ListView由多个子视图(通常称为`ListView`的`Item`)组成,这些子视图由适配器...

    listView嵌套listViewDemo

    在Android开发中,ListView是一种常用的视图组件,用于展示大量数据列表。...通过分析和学习这个Demo,开发者可以更好地理解和处理ListView的嵌套问题,提高用户体验,同时也能为其他复杂布局提供参考。

    listView 嵌套 ListView demo

    通过分析和运行这个demo,开发者可以学习到如何在实际项目中应用嵌套ListView,提升用户体验,特别是处理层级关系复杂的数据时。不过,需要注意的是,随着嵌套深度的增加,性能问题和复杂度也会相应提高,因此在设计...

    ListView源码学习!

    通过对ListView源码的学习,我们可以深入了解其工作原理,解决性能问题,实现更复杂的交互效果,提升用户体验。同时,这也为理解和使用其他基于Adapter的控件(如GridView、RecyclerView)奠定了基础。

    ListView控件学习.rar

    1. **ListView控件的基本介绍** ListView控件允许程序员在窗口小部件中以多种视图(如图标、列表、详细信息等)展示数据。它可以显示文件系统目录、数据库记录或其他任何类型的数据集。在VB中,ListView控件通常...

    Android listView学习源码.rar

    这个“Android listView学习源码.rar”压缩包很可能是为了帮助开发者深入理解ListView的工作原理,以及如何有效地使用和优化ListView。下面将详细讨论ListView的相关知识点。 1. **ListView基本使用**: - `...

    ListView嵌套GridView以及ListVIew嵌套ListVIew

    通过分析和学习这个文件,开发者可以更好地理解如何在实际项目中应用这些技术。 总的来说,ListView嵌套GridView和ListView是Android开发中实现复杂布局的有效手段,它们结合自定义适配器和View复用机制,能够帮助...

    ListView学习(二) 点击条目隐藏展开正文

    在“ListView学习(二) 点击条目隐藏展开正文”这个主题中,我们将会深入探讨如何在ListView的每个条目上实现点击事件,以隐藏或展开对应的正文内容。这涉及到自定义Adapter、视图复用以及触摸事件处理等关键知识点...

    AndroidlistView学习源码.zip

    这个"AndroidlistView学习源码.zip"压缩包显然包含了关于ListView使用的源代码示例,可以帮助开发者深入理解ListView的工作原理以及如何有效地进行自定义和优化。 1. **ListView基本使用**:ListView的基本用法包括...

    Android ListView 控件学习

    1. 使用ViewHolder模式:这是一种提高ListView性能的常用技巧,通过缓存视图引用,减少查找子视图的时间。 2. 减少getView()的复杂性:避免在getView()中执行耗时操作,如网络请求、图片加载等。 3. 使用AsyncTask或...

    ListView开发实例 ListView示例 ListView案例 小例子 源码

    ListView是Android平台上一种非常重要的控件,用于展示大量...通过不断的实践和学习,你可以创造出更加丰富和动态的列表效果。在提供的源码中,你应该能找到关于ListView实例的详细实现,进一步加深对ListView的理解。

Global site tag (gtag.js) - Google Analytics