Android getItemAtPosition()如何从ListView中的选定项获取可读数据

Android getItemAtPosition()如何从ListView中的选定项获取可读数据,android,listview,selecteditem,Android,Listview,Selecteditem,我有一个从Android ContactManager示例中获得的联系人列表视图。这个列表显示得很好,但我不知道如何从所选项目中获取信息,例如“姓名”和“电话号码” 我可以得到所选的位置,但是mContactList.getItemAtPosition(position)的结果是ContentResolver$CursorWrapperInner,这对我来说没有任何意义。我不能从中得到正面或反面 有人知道如何从listView中的选定项目中获取姓名/id/电话号码吗 这是我的密码 @Overri

我有一个从Android ContactManager示例中获得的联系人列表视图。这个列表显示得很好,但我不知道如何从所选项目中获取信息,例如“姓名”和“电话号码”

我可以得到所选的位置,但是mContactList.getItemAtPosition(position)的结果是ContentResolver$CursorWrapperInner,这对我来说没有任何意义。我不能从中得到正面或反面

有人知道如何从listView中的选定项目中获取姓名/id/电话号码吗

这是我的密码

@Override
public void onCreate(Bundle savedInstanceState)
{
    Log.v(TAG, "Activity State: onCreate()");
    super.onCreate(savedInstanceState);
    setContentView(R.layout.choose_contact);

    // Obtain handles to UI objects
    mAddAccountButton = (Button) findViewById(R.id.addContactButton);
    mContactList = (ListView) findViewById(R.id.contactList);
    mShowInvisibleControl = (CheckBox) findViewById(R.id.showInvisible);

    // Initialize class properties
    mShowInvisible = false;
    mShowInvisibleControl.setChecked(mShowInvisible);
    mContactList.setOnItemClickListener(new OnItemClickListener()
    {
      public void onItemClick(AdapterView<?> parent, View view, int position, long id)
      {
       addContactAt(position);
      }
    });
    mShowInvisibleControl.setOnCheckedChangeListener(new OnCheckedChangeListener() {
        public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
            Log.d(TAG, "mShowInvisibleControl changed: " + isChecked);
            mShowInvisible = isChecked;
            populateContactList();
        }
    });

    // Populate the contact list
    populateContactList();

}

/**
 * Populate the contact list based on account currently selected in the account spinner.
 */
private SimpleCursorAdapter adapter;
private void populateContactList() {
    // Build adapter with contact entries
    Cursor cursor = getContacts();
    String[] fields = new String[] {
            ContactsContract.Data.DISPLAY_NAME
    };
    adapter = new SimpleCursorAdapter(this, R.layout.contact_entry, cursor,
            fields, new int[] {R.id.contactEntryText});
    mContactList.setAdapter(adapter);
}

/**
 * Obtains the contact list for the currently selected account.
 *
 * @return A cursor for for accessing the contact list.
 */
private Cursor getContacts()
{
    // Run query
    Uri uri = ContactsContract.Contacts.CONTENT_URI;
    String[] projection = new String[] {
            ContactsContract.Contacts._ID,
            ContactsContract.Contacts.DISPLAY_NAME
    };
    String selection = ContactsContract.Contacts.IN_VISIBLE_GROUP + " = '" +
            (mShowInvisible ? "0" : "1") + "'";
    String[] selectionArgs = null;
    String sortOrder = ContactsContract.Contacts.DISPLAY_NAME + " COLLATE LOCALIZED ASC";

    return managedQuery(uri, projection, selection, selectionArgs, sortOrder);
}

private void addContactAt(int position)
{
 Object o = mContactList.getItemAtPosition(position);
}
@覆盖
创建时的公共void(Bundle savedInstanceState)
{
Log.v(标记“活动状态:onCreate()”);
super.onCreate(savedInstanceState);
setContentView(右布局,选择联系人);
//获取UI对象的句柄
mAddAccountButton=(按钮)findViewById(R.id.addContactButton);
mContactList=(ListView)findViewById(R.id.contactList);
mShowInvisibleControl=(复选框)findViewById(R.id.showInvisibleControl);
//初始化类属性
mshow=假;
mShowInvisibleControl.setChecked(mShowInvisibleControl);
setOnItemClickListener(新的OnItemClickListener()
{
public void onItemClick(AdapterView父对象、视图、整型位置、长id)
{
addContactAt(位置);
}
});
mShowInvisibleControl.setOnCheckedChangeListener(新的OnCheckedChangeListener(){
检查更改后的公共无效(复合按钮视图,布尔值已检查){
Log.d(标记“mShowInvisibleControl changed:+isChecked”);
mShowInvisible=已检查;
populateContactList();
}
});
//填充联系人列表
populateContactList();
}
/**
*根据帐户微调器中当前选择的帐户填充联系人列表。
*/
专用SimpleCursorAdapter适配器;
私有void populateContactList(){
//使用联系人条目生成适配器
Cursor=getContacts();
字符串[]字段=新字符串[]{
Contacts contract.Data.DISPLAY\u NAME
};
适配器=新的SimpleCursorAdapter(此,R.layout.contact_条目,光标,
字段,新int[]{R.id.contactEntryText});
mContactList.setAdapter(适配器);
}
/**
*获取当前选定帐户的联系人列表。
*
*@返回用于访问联系人列表的光标。
*/
私有游标getContacts()
{
//运行查询
Uri=Contacts contract.Contacts.CONTENT\u Uri;
字符串[]投影=新字符串[]{
联系人合同联系人。\u ID,
Contacts contract.Contacts.DISPLAY\u NAME
};
字符串选择=Contacts contract.Contacts.IN_VISIBLE_GROUP+“=”“+
(mshow?“0”:“1”)+“”;
字符串[]selectionArgs=null;
字符串排序器=Contacts contract.Contacts.DISPLAY_NAME+“整理本地化ASC”;
返回managedQuery(uri、投影、选择、selectionArgs、排序器);
}
专用void addContactAt(内部位置)
{
对象o=mContactList.getItemAtPosition(位置);
}

}`轰!我想出来了。基本上,您可以从单击事件中获取位置号,然后在my addContatAt()中使用该位置在光标内搜索所需的字段。在我的例子中,我想要显示名称

我习惯于在Flex中做事,所以光标业务对我来说是不同的:)

无论如何,对于其他人,这里是我的代码:

@Override
public void onCreate(Bundle savedInstanceState)
{
    Log.v(TAG, "Activity State: onCreate()");
    super.onCreate(savedInstanceState);
    setContentView(R.layout.choose_contact);

    // Obtain handles to UI objects
    mAddAccountButton = (Button) findViewById(R.id.addContactButton);
    mContactList = (ListView) findViewById(R.id.contactList);
    mShowInvisibleControl = (CheckBox) findViewById(R.id.showInvisible);

    // Initialize class properties
    mShowInvisible = false;
    mShowInvisibleControl.setChecked(mShowInvisible);
    mContactList.setOnItemClickListener(new OnItemClickListener()
    {
         public void onItemClick(AdapterView<?> parent, View view, int position, long id)
         {
             addContactAt(position);
         }
    });
    mShowInvisibleControl.setOnCheckedChangeListener(new OnCheckedChangeListener() {
        public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
            Log.d(TAG, "mShowInvisibleControl changed: " + isChecked);
            mShowInvisible = isChecked;
            populateContactList();
        }
    });

    // Populate the contact list
    populateContactList();

}

/**
 * Populate the contact list based on account currently selected in the account spinner.
 */
private SimpleCursorAdapter adapter;
private void populateContactList() {
    // Build adapter with contact entries
    contactsCursor = getContacts();
    String[] fields = new String[] {
            ContactsContract.Data.DISPLAY_NAME
    };
    adapter = new SimpleCursorAdapter(this, R.layout.contact_entry, contactsCursor,
            fields, new int[] {R.id.contactEntryText});
    mContactList.setAdapter(adapter);
}

/**
 * Obtains the contact list for the currently selected account.
 *
 * @return A cursor for for accessing the contact list.
 */
private Cursor getContacts()
{
    // Run query
    Uri uri = ContactsContract.Contacts.CONTENT_URI;
    String[] projection = new String[] {
            ContactsContract.Contacts._ID,
            ContactsContract.Contacts.DISPLAY_NAME
    };
    String selection = ContactsContract.Contacts.IN_VISIBLE_GROUP + " = '" +
            (mShowInvisible ? "0" : "1") + "'";
    String[] selectionArgs = null;
    String sortOrder = ContactsContract.Contacts.DISPLAY_NAME + " COLLATE LOCALIZED ASC";

    return managedQuery(uri, projection, selection, selectionArgs, sortOrder);
}

private void addContactAt(int position)
{
    contactsCursor.moveToPosition(position);
    String name = contactsCursor.getString(
            contactsCursor.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));
}
}
@覆盖
创建时的公共void(Bundle savedInstanceState)
{
Log.v(标记“活动状态:onCreate()”);
super.onCreate(savedInstanceState);
setContentView(右布局,选择联系人);
//获取UI对象的句柄
mAddAccountButton=(按钮)findViewById(R.id.addContactButton);
mContactList=(ListView)findViewById(R.id.contactList);
mShowInvisibleControl=(复选框)findViewById(R.id.showInvisibleControl);
//初始化类属性
mshow=假;
mShowInvisibleControl.setChecked(mShowInvisibleControl);
setOnItemClickListener(新的OnItemClickListener()
{
public void onItemClick(AdapterView父对象、视图、整型位置、长id)
{
addContactAt(位置);
}
});
mShowInvisibleControl.setOnCheckedChangeListener(新的OnCheckedChangeListener(){
检查更改后的公共无效(复合按钮视图,布尔值已检查){
Log.d(标记“mShowInvisibleControl changed:+isChecked”);
mShowInvisible=已检查;
populateContactList();
}
});
//填充联系人列表
populateContactList();
}
/**
*根据帐户微调器中当前选择的帐户填充联系人列表。
*/
专用SimpleCursorAdapter适配器;
私有void populateContactList(){
//使用联系人条目生成适配器
contactsCursor=getContacts();
字符串[]字段=新字符串[]{
Contacts contract.Data.DISPLAY\u NAME
};
适配器=新的SimpleCursorAdapter(此,R.layout.contact_条目,contactsCursor,
字段,新int[]{R.id.contactEntryText});
mContactList.setAdapter(适配器);
}
/**
*获取当前选定帐户的联系人列表。
*
*@返回用于访问联系人列表的光标。
*/
私有游标getContacts()
{
//运行查询
Uri=Contacts contract.Contacts.CONTENT\u Uri;
字符串[]投影=新字符串[]{
联系人合同联系人。\u ID,
Contacts contract.Contacts.DISPLAY\u NAME
};
字符串选择=Contacts contract.Contacts.IN_VISIBLE_GROUP+“=”“+
(mshow?“0”:“1”)+“”;
字符串[]selectionArgs=null;
字符串排序器=Contacts contract.Contacts.DISPLAY_NAME+“整理本地化ASC”;
返回managedQuery(uri、投影、选择、selectionArgs、排序器);
}
专用void addContactAt(内部位置)
{
接触器或移动位置(位置);
斯特里
@Override
protected void onListItemClick(ListView l, View v, int position, long ida) {
   super.onListItemClick(l, v, position, ida);

   Cursor mycursor = (Cursor) getListView().getItemAtPosition(position);
   showToast("mycursor.getString(1) " + mycursor.getString(1) +"   ");
public void onItemClick(AdapterView<?> parent, View view,int position, long id) 
{
Map<String, Object> map = (Map<String, Object>)_productListView.getItemAtPosition(position); 
String _productCode = (String) map.get("ProductCode");
String _productName = (String) map.get("ProjectName");
Double _price = (Double) map.get("Price");
}
    public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
    Cursor client = (Cursor)parent.getItemAtPosition(position);
    String client_name = client.getString(2); // third column in db
    Toast.makeText(getBaseContext(), client_name, Toast.LENGTH_SHORT).show();
}