如何阅读android.android中的R.id.text2



我有以下代码

public class Contacts extends ListActivity {
    ListView lv;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        Cursor cursor = getContentResolver().query(
                ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, null, null, null);
        startManagingCursor(cursor);
        String[] from = { ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME,
                ContactsContract.CommonDataKinds.Phone.NUMBER,
                ContactsContract.CommonDataKinds.Phone._ID };
        int[] to = { android.R.id.text1, android.R.id.text2 };
        ListAdapter listadapter = new SimpleCursorAdapter(this,
                android.R.layout.simple_list_item_multiple_choice, cursor,
                from, to);
        setListAdapter(listadapter);
        lv = getListView();
        lv.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);
        lv.setItemsCanFocus(false);
        lv.setTextFilterEnabled(true);
        final int check = lv.getCheckedItemPosition();//lv.getCheckedItemIds();

        lv.setOnItemClickListener(new OnItemClickListener() {

            @Override
            public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
                    long arg3) {
                TextView tv = (TextView) arg1.findViewById(android.R.id.text2);

                String aa = (String) tv.getText(); 
                String ab =  lv.getItemAtPosition(arg2).toString();
                int ac = lv.getSelectedItemPosition();
                System.out.println("wow "+ab +" ww "+ ac + " "+ aa);
                Toast.makeText(Contacts.this, ((TextView) arg1).getText(), Toast.LENGTH_LONG).show();       
            }
        });
    }
}

我想读ListView中的数字部分,到目前为止我还没能做到。我甚至试过TextView tv = (TextView) arg1.findViewById(android.R.id.text2);String test = tv.getText().toString();但我总是得到NullPointerException基本上,我想从我手机的联系人列表中提取所有联系人,这样我就可以一次选择多个联系人。救命!

问题是您使用的是android.R.layout.simple_list_item_multiple_choice,它不包含任何id为android.R.id.text2TextView。布局包含以下内容(至少在某些设备上(:

<CheckedTextView xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@android:id/text1"
    android:layout_width="match_parent"
    android:layout_height="?android:attr/listPreferredItemHeight"
    android:textAppearance="?android:attr/textAppearanceListItem"
    android:gravity="center_vertical"
    android:checkMark="?android:attr/listChoiceIndicatorMultiple"
    android:paddingLeft="8dip"
    android:paddingRight="8dip"
/>

您应该为列表项创建自定义布局。

还要注意,使用私有布局和其他资源(android.R类中的资源(通常是个坏主意,你不能确定它们是否存在于所有设备和Android版本上。

如果您想要获取的数据在ListView中,则您在ListAdapter上有相同的数据,因此在itemClick上,您可以检索具有所单击项目的视图id的相应对象。

@Override
public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) {
    int id = arg1.getItemId();
    listadapter.getItem(id);
    ...
    ...
}

我想setcontentview(R.id.yourlayout(不是在oncreate((中创建的所以程序每次都会给你空指针异常。。。只需设置setcontentview(R.id.yourlayout(,我猜它会在

中工作

查看onItemClick:的签名

public abstract void onItemClick (AdapterView<?> parent, View view, int position, long id)

您可以使用第三个值作为所选项目的位置,并使用该值作为参数调用getItem((。

无论你做什么,都不要使用findViewById,因为它对listview来说是错误的。错误的原因是listView重新使用旧视图,以便使用最少数量的视图(与任何时候显示的视图数量大致相同(。


编辑:

这里有一个例子,你可以用我写的东西做什么:

lv.setOnItemClickListener(new OnItemClickListener()
      {
        @Override
        public void onItemClick(final AdapterView<?> arg0,final View arg1,final int arg2,final long arg3)
          {
          final Object item=listadapter.getItem(arg2);
          final CursorWrapper cursorWrapper=(CursorWrapper)listadapter.getItem(arg2);
          final int columnCount=cursorWrapper.getColumnCount();
          for(int i=0;i<columnCount;++i)
            Log.d("DEBUG",cursorWrapper.getColumnName(i)+":"+cursorWrapper.getString(i));
          }
      });

相关内容

  • 没有找到相关文章

最新更新