0

私はこの次のコードを持っています

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 基本的には、一度に複数の連絡先を選択できるように、電話の連絡先リストからすべての連絡先を取得したいと思っています。助けてください!

4

4 に答える 4

1

問題は、 id をandroid.R.layout.simple_list_item_multiple_choice含まないを使用していることです。レイアウトにはこれが含まれます(少なくとも一部のデバイスでは):TextViewandroid.R.id.text2

<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 に存在することを確認することはできません。

于 2013-02-23T21:27:44.053 に答える
0

onItemClickの署名を参照してください。

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

3 番目を選択中の項目の位置として使用し、この値をパラメーターとしてgetItem () を呼び出すことができます。

何をしても、リストビューには間違っているので、findViewByIdを使用しないでください。それが間違っている理由は、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));
          }
      });
于 2013-02-23T21:43:37.543 に答える
0

取得したいデータが ListView にある場合は、ListAdapter に同じデータがあるため、itemClick で、クリックされた項目のビュー ID を持つ対応するオブジェクトを取得できます。

@Override
public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) {
    int id = arg1.getItemId();
    listadapter.getItem(id);
    ...
    ...
}
于 2013-02-23T21:29:05.893 に答える
0

setcontentview(R.id.yourlayout) は oncreate() で作成されていないと思うので、プログラムは毎回 null ポインター例外を与えます... setcontentview(R.id.yourlayout) を設定するだけでうまくいくと思います

于 2013-02-23T21:30:10.337 に答える