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)

所有这些都会抛出一种或另一种类型的强制转换异常。我难住了。这似乎是一件简单的事情。供您参考,以下是列表片段的填充方式:

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 提供给我的第二个链接得到了答案。

于 2012-11-19T20:31:58.010 回答