0

CursorLoader を使用して入力された ListFragment があります。ListFragment にデータが入力されると、OnItemClickListener メソッドを使用して、ユーザーが選択した List Fragment の項目を特定します。どうすればいいですか?私はもう試した:

String item = getListAdapter().getItem(position);
String item = getListAdapter().getItem(position).toString();

String item = (String) ((Fragment) getListAdapter().getItem(position)).getString(0);

position は、次のように onClickItemListener メソッドに渡される整数です。

public void onListItemClick(ListView l, View v, int position, long id)

これらはすべて、何らかのタイプのキャスト例外をスローします。私は困惑しています。これは簡単なことのように思えます。参考までに、List Fragment がどのように設定されるかを次に示します。

private SimpleCursorAdapter mAdapter;
private static final String[] PROJECTION = new String[] { "_id", "stitchname" };
@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);  
 }

どんな提案でも大歓迎です、ありがとう!

4

2 に答える 2

1

間違ったメソッドをオーバーライドしています。ListFragment を使用していると言ったので、Fragment のどこかで CursorAdapter/ArrayAdapter を宣言している可能性があります。その場合は、次のようにします。

class yourFragemt extends ListFragment{

   //Member Variable
   private SimpleCursorAdapter mAdapter;

   ....

   @Override
   public void onItemClick(AdapterView<?> arg0, View arg1, int pos, long arg3) {

       Cursor c = (Cursor) mAdapter.getItem(pos);

       String value = c.getString(c
            .getColumnIndex(ColumnIndex));

    }
}
于 2012-11-17T05:48:37.617 に答える
1

答えは次のとおりです。

@Override
public void onListItemClick(ListView l, View v, int position, long id) {
    super.onListItemClick(l, v, position, id);

    Cursor c = ((SimpleCursorAdapter)l.getAdapter()).getCursor();
    c.moveToPosition(position);
    String item = c.getString(1);
}

上記のコメントで Georgy Gobozov から提供された 2 番目のリンクから回答を得ました。

于 2012-11-19T20:31:58.010 に答える