ListFragmentを拡張するクラスがあり、サポートライブラリを使用しています。クラスのonListItemClickメソッドには、次の行があります。
@Override
public void onListItemClick(ListView l, View v, int position, long id) {
String item = (String) ((Fragment) getListAdapter().getItem(position)).getString(1);
DetailFrag frag = (DetailFrag) getFragmentManager().findFragmentById(R.id.frag_stitchdetail);
if (frag != null && frag.isInLayout()) {
frag.setText(item);
}
}
ここで、positionはonListItemClickメソッドに渡されるパラメーターです。リストにはアイテムが1つしかないため、作成しているサンプルアプリの実行時の値は0です。この行は次のエラーをスローします。
java.lang.CastClassException:android.content.ContentResolver$CursorWrapperInnerをjava.lang.Stringにキャストできません
私はこれをグーグルで検索し、stackoverflowで検索しましたが、これを文字列にキャストできない理由についてのヒントを与えるものは何も見つかりません。誰か知ってる?ありがとう!
クエリのContentProviderコード:
@Override
public Cursor query(Uri uri, String[] projection, String selection,
String[] selectionArgs, String sortOrder) {
SQLiteQueryBuilder queryBuilder = new SQLiteQueryBuilder();
queryBuilder.setTables(STITCHTABLE_BASEPATH);
int uriType = sURIMatcher.match(uri);
switch (uriType)
{
case STITCHES_ID:
queryBuilder.appendWhere(SQLData.KEY_ROWID + "=" + uri.getLastPathSegment());
break;
case STITCHES:
//no filter
break;
default:
throw new IllegalArgumentException("Unknown URI");
}
Cursor cursor = queryBuilder.query(mDB.getReadableDatabase(), projection, selection, selectionArgs, null, null, sortOrder);
cursor.setNotificationUri(getContext().getContentResolver(), uri);
return cursor;
}
CursorLoaderのListFragmentのコード:
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
Intent myData = getActivity().getIntent();
Bundle info = myData.getExtras();
String[] dataColumns = { "stitchname" };
int[] viewIDs = { R.id.stitchlist1 };
mAdapter = new SimpleCursorAdapter(getActivity(), R.layout.stitchlist, null, dataColumns, viewIDs, 0);
setListAdapter(mAdapter);
getLoaderManager().initLoader(0, info, (LoaderCallbacks<Cursor>) this);
}
@Override
public Loader<Cursor> onCreateLoader(int id, Bundle args) {
String selection = "stitchlevel=?";
String[] selectionArgs = new String[] {args.getString("Level")};
return (Loader<Cursor>) new CursorLoader(getActivity(), STITCHES_URI,
PROJECTION, selection, selectionArgs, null);
}
@Override
public void onLoadFinished(Loader<Cursor> loader, Cursor cursor) {
mAdapter.swapCursor((android.database.Cursor) cursor);
}