1

デバイスからの連絡先が取り込まれたスピナーがあります。

Cursor contactsCursor = getContentResolver().query(ContactsContract.Contacts.CONTENT_URI, {ContactsContract.Contacts._ID, ContactsContract.Contacts.DISPLAY_NAME}, ContactsContract.Contacts.HAS_PHONE_NUMBER +" = "+ HAS_PHONE_NUMBER_STATE, null, ContactsContract.Contacts.DISPLAY_NAME +" ASC");

SimpleCursorAdapter sca = new SimpleCursorAdapter(getActivity(), android.R.layout.simple_spinner_item, contactsCursor, new String[] { ContactsContract.Contacts.DISPLAY_NAME }, new int[] {android.R.id.text1});

contactsSpinner.setAdapter(sca);

そうセット選択しようとすると

String contactId = getContactSelectedId();      
if(null != contactId) {
    contactsSpinner.setSelection(Integer.valueOf(contactId));
}

例外が発生します:

llegalStateException: couldn't move cursor to position x

スタックトレース:

07-31 01:07:08.854: E/AndroidRuntime(22745): FATAL EXCEPTION: main
07-31 01:07:08.854: E/AndroidRuntime(22745): java.lang.IllegalStateException: couldn't move cursor to position 1136
07-31 01:07:08.854: E/AndroidRuntime(22745):    at android.support.v4.widget.CursorAdapter.getView(CursorAdapter.java:248)
07-31 01:07:08.854: E/AndroidRuntime(22745):    at android.widget.Spinner.makeAndAddView(Spinner.java:544)
07-31 01:07:08.854: E/AndroidRuntime(22745):    at android.widget.Spinner.layout(Spinner.java:495)
07-31 01:07:08.854: E/AndroidRuntime(22745):    at android.widget.Spinner.onLayout(Spinner.java:459)
07-31 01:07:08.854: E/AndroidRuntime(22745):    at android.view.View.layout(View.java:14055)
07-31 01:07:08.854: E/AndroidRuntime(22745):    at android.view.ViewGroup.layout(ViewGroup.java:4604)
07-31 01:07:08.854: E/AndroidRuntime(22745):    at android.widget.RelativeLayout.onLayout(RelativeLayout.java:948)
07-31 01:07:08.854: E/AndroidRuntime(22745):    at android.view.View.layout(View.java:14055)

どうすればこの問題を解決できますか?

4

1 に答える 1

4

setSelection(int position)関数はパラメーターとしての位置を取ります
が、選択したアイテムの ID を関数に与えます。

getContactSelectedPosition()関数などを作成する必要があります。この関数は、(潜在的に) アダプターのデータをループし、一致する連絡先の位置を返します。

于 2013-07-30T22:30:41.360 に答える