2012-03-18 39 views
0

在我的活動課程中我重寫onCreateDialog()方法 ,代碼有點像如下所示。 對話框現在列出我聯繫人列表中的所有項目。Android:從光標所創建的列表對話框中獲取所選項目的ID

當用戶點擊這個列表中的一個項目時,我想獲得點擊項目的聯繫人ID ,即字段Phone._ID的值。

目前,我只能得到OnClickListener參數 which的選定內容的位置(索引)。 如果在ListActivity中顯示的列表中我大概可以使用:

getListView().getItemIdAtPosition(which); 

但在這裏我無法得到ListView的一個參考。 如何從使用光標創建的列表對話框中獲取單擊項目的ID。

protected Dialog onCreateDialog(int id) { 
    String[] projection = new String[] { 
       Phone._ID, 
       Phone.DISPLAY_NAME, 
       Phone.NUMBER 
     }; 
    Cursor cursor = managedQuery(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, 
       projection, null, null, null); 
    return new AlertDialog.Builder(ContactActivity.this) 
      .setTitle("Select Contacts") 
      .setCursor(cursor, 
       new DialogInterface.OnClickListener() { 

      public void onClick(DialogInterface dialog, int which) { 

       /* User clicked on a contact item */ 

       Toast.makeText(getApplicationContext(), 
          "CLICKED-"+which, 
      Toast.LENGTH_SHORT).show(); 

      } 
       }, ContactsContract.Contacts.DISPLAY_NAME) 
      .create(); 

} 

在此先感謝

回答

0

我發現這個自己一個解決方案。以下是我現在使用的代碼。

我已經將我的聯繫人列表查詢的光標聲明爲final。 並使用onClick方法內的相同光標對象到 獲得單擊位置的記錄,使用Cursor的moveToPosition()方法 。 另請注意,我必須在onClick的底部 處使用cursor.moveToFirst();。否則,當我再次調用 對話框時,對話框顯示爲空(我不知道爲什麼會發生這種情況)。

protected Dialog onCreateDialog(int id) { 
String[] projection = new String[] { 
      Phone._ID, 
      Phone.DISPLAY_NAME, 
      Phone.NUMBER 
    }; 
final Cursor cursor = managedQuery(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, 
      projection, null, null, null); 
return new AlertDialog.Builder(ContactActivity.this) 
     .setTitle("Select Contacts") 
     .setCursor(cursor, 
     new DialogInterface.OnClickListener() { 

      public void onClick(DialogInterface dialog, int which) { 

      /* User clicked on a contact item */ 
      if(cursor.moveToPosition(which)){ 

      long contactId=cursor.getLong(0); 
      String name=cursor.getString(1); 
      String number=cursor.getString(2); 
      Toast.makeText(getApplicationContext(), 
        "You selected: ["+contactId+"]" 
         + name + " , " +number, 
        Toast.LENGTH_SHORT) 
        .show(); 
      } 
      cursor.moveToFirst();//Reset the position 

      } 
     }, ContactsContract.Contacts.DISPLAY_NAME) 
     .create(); 

} 

但我不覺得這是正確的方式來做到這一點。 所以我不把這個標記爲這個問題的答案。 我會在一段時間內打開此問題,並希望 有人可以想出更好的建議。

更新:標記爲答案,因爲沒有迴應。

相關問題