2013-03-14 64 views
1

我創建了一個自定義的ListView使用BaseAdapter現在我要填充此列表視圖與聯繫人姓名和電話號碼從手機book..I正嘗試這個..如何將聯繫人從電話填充到自定義列表視圖?

import java.util.ArrayList; 

import android.app.Activity; 
import android.database.Cursor; 
import android.os.Bundle; 
import android.provider.ContactsContract; 
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.TextView; 
import android.widget.Toast; 

public class Rabtaye extends Activity { 

    ListView msgList; 
    ArrayList<MessageDetails> details; 
    AdapterView.AdapterContextMenuInfo info; 

    Cursor cursor; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.layout_main); 

     msgList = (ListView) findViewById(R.id.MessageList); 
     details = new ArrayList<MessageDetails>(); 

     MessageDetails Detail = new MessageDetails(); 
     cursor = getContentResolver().query(
       ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, null, 
       null, null); 
     startManagingCursor(cursor); 

     String info[] = { ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME, 
       ContactsContract.CommonDataKinds.Phone.NUMBER, 
       ContactsContract.CommonDataKinds.Phone._ID }; 
     for(String a:info){ 
     Detail.setName(a); 
     } 
     Detail.setNumber("0313"); 
     details.add(Detail); 
//  int to[] = { R.id.name, R.id.number }; 
//  ListAdapter cursada = new SimpleCursorAdapter(this, 
//    android.R.layout.simple_expandable_list_item_2, cursor, info, 
//    to); 
     msgList.setAdapter(new CustomAdapter(details, this)); 


     msgList.setOnItemClickListener(new OnItemClickListener() { 

      @Override 
      public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, 
        long arg3) { 
       TextView s = (TextView) arg1.findViewById(R.id.name); 
       String abc = s.getText().toString(); 
       Toast.makeText(Rabtaye.this, abc, Toast.LENGTH_LONG).show(); 
      } 
     }); 
    } 
} 

我用不同的方式,但我不能使用聯繫人姓名或號碼填充ListView。在這個代碼中,我必須靜態添加名稱和編號......我很困惑這裏..幫助將不勝感激。提前致謝。我是新手所以請在我容易.. :)

回答

1

嗯。你在正確的軌道上,但我認爲你有點徘徊。

ListView是一個視圖對象,而不是BaseAdapter。據我所知你的代碼,你不需要一個自定義適配器爲您的ListView。

你應該做的是將常規CursorAdapter綁定到ListView,使用CursorLoader從Contacts Provider加載你想要的聯繫人數據,然後將生成的光標移動到CursorAdapter。

您可以在此Android培訓課程中找到相關說明: Loading Data in the Background

你想在你的自定義ListView,你不能從ListView本身得到什麼?

+0

事情是,我想填充所有聯繫人的整個列表視圖,並與他們的複選框。我試過默認的ListView,但它不顯示Numbers。這就是爲什麼我切換到自定義列表視圖。 – 2013-03-15 17:03:00

1

如果你不僅僅是一個項目列表放入ListView(它看起來像你在做名字,數字等),你有創建您自己的自定義適配器。無論是在你的活動中,還是在一個新班級中,都可以擴展BaseAdapter類。那麼你必須重寫getView()方法。這就是每當新物品充氣時所謂的。

當您創建它時,您將ArrayList傳遞給BaseAdapter。適配器的getView()方法是您對邏輯進行編碼以獲取數據並將其作爲列表項呈現的位置。您必須爲每個列表項目定義一個新的XML文件,其中包含您的TextViews以及每個列表項目中不同孩子的內容,這就是您填充數據的內容。

如果您搜索「baseadapter」,那麼就有一堆例子。這是one,給出了一個相當不錯的介紹。

相關問題