代码之家  ›  专栏  ›  技术社区  ›  b-ryce

getItemAtPosition()如何从列表视图中的选定项获取可读数据

  •  6
  • b-ryce  · 技术社区  · 16 年前

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

    有人知道我如何从列表视图中的选定项中获取姓名/身份证/电话号码吗?

    这是我的密码。

    @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);
    }
    

    }`

    5 回复  |  直到 16 年前
        1
  •  15
  •   sth    14 年前
    @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) +"   ");
    
        2
  •  6
  •   AlexTa    9 年前

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

    不管怎样,对其他人来说,这是我的准则:

    @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));
    }
    }
    
        3
  •  4
  •   Miki Habryn    15 年前

    嗯-你把AdapterView的光标放在背后,这可能不是个好主意。另一种选择是打电话父.getItemAtPosition(位置)在OnEmClick处理程序中,并将结果投射到光标上;它将指向与单击的项对应的行。

        4
  •  4
  •   Ferdiyan Syah    11 年前
    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");
    }
    
        5
  •  0
  •   user3856816    10 年前

    我使用了Miki Habryn提到的以下代码

        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();
    }
    
    推荐文章