Android将联系人读取到LISTVIEW中遇到的问题!

   最近在学习Android开发,学习到ListView控件使用的时候参考了《Android应用开发揭秘》中的代码,由于该书是基于Android  2.0进行编写的,其中的部分代码到了更新的Android平台就失效了。本程序的功能是将联系人添加到一个ListView中,并显示在屏幕上,当用户上下滚动选择项的时候会提示滚动到第几项,点击项目的时候也会提示点击了第几项。代码如下:package com.lu.listviewtest;

import android.app.Activity;
import android.database.Cursor;
import android.os.Bundle;
import android.provider.ContactsContract;
import android.provider.ContactsContract.PhoneLookup;
import android.view.View;
import android.widget.Adapter;
import android.widget.AdapterView;
import android.widget.ListAdapter;
import android.widget.ListView;
import android.widget.SimpleCursorAdapter;
import android.widget.Toast;

public class ListViewTest extends Activity {
    
/** Called when the activity is first created. */
    
    @Override
    
public void onCreate(Bundle savedInstanceState) {
        
super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        android.widget.ListView listview
=(ListView)findViewById(R.id.ListView01);
        Cursor cur
=getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, nullnullnullnull);
        startManagingCursor(cur);
        ListAdapter adapter
=new SimpleCursorAdapter(this,android.R.layout.simple_list_item_2,cur,
                
new String[] {PhoneLookup.DISPLAY_NAME,ContactsContract.CommonDataKinds.Phone.NUMBER},
                
new int [] {android.R.id.text1,android.R.id.text2});
        
        listview.setAdapter(adapter);
        listview.setOnItemSelectedListener(
new AdapterView.OnItemSelectedListener(){
            @Override
            
public void onItemSelected(AdapterView<?> arg0,View arg1,int arg2,long arg3)
            {
                DisplayToast(
"滚动到第"+Long.toString(arg0.getSelectedItemId())+""); 
                                
            }
            
public void onNothingSelected(AdapterView<?> arg0)
            {
                
            }
        });
        
        listview.setOnItemClickListener(
new AdapterView.OnItemClickListener() {
            @Override
            
public void onItemClick(AdapterView<?> arg0,View arg1,int arg2,long arg3)
            {
                DisplayToast(
"选中了第"+Integer.toString(arg2+1)+"");
            }
            
        });
        
        
    }
    
    
public void DisplayToast(String str){
        Toast.makeText(
this, str, Toast.LENGTH_SHORT).show();
    }
    
}

   

    书中new String[] {PhoneLookup.DISPLAY_NAME,ContactsContract.CommonDataKinds.Phone.NUMBER} ,这句的代码为:new String[] {PhoneLookup.DISPLAY_NAME,PhoneLookup.NUMBER},在2.0以上的平台已经失效了。

 

    在执行onItemSelected函数的时候,我发现一个问题:比如屏幕上有3个联系人,滚动到第一项,提示1,滚动到第二项,提示的却是3,滚动到第三项,提示的却是5.。。这个是为什么呢?有人能解答么?不胜感激!!! 

posted @ 2011-06-15 16:51  猪肉包子  阅读(884)  评论(2编辑  收藏  举报