如果有多个项目,如何在ListView中引用Item?

时间:2014-12-09 18:08:05

标签: android sqlite

嘿伙计这是我的代码:

private void populateListView() {

    Cursor cursor = mydb.getAllEvents();

    String[] fromFieldNames = new String[]
            {DBHelper.EVENTS_COLUMN_NAME,DBHelper.EVENTS_COLUMN_CATEGORY};

    int[] toViewIDs = new int[]
            {R.id.event_name, R.id.cat_name};

    SimpleCursorAdapter myCursorAdapter;
    myCursorAdapter = new SimpleCursorAdapter(this,R.layout.item_layout,cursor,fromFieldNames,toViewIDs,0);
    final ListView myList = (ListView) findViewById(R.id.listView1);

    myList.setAdapter(myCursorAdapter);

    myList.setOnClickListener(new AdapterView.OnItemClickListener(){

        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
            String selected = myList.getItemAtPosition(position);
        }
    });`

正如您所看到的那样,该位置有多个项目,那么我如何单独引用每个项目?例如,我只想引用事件的名称。

2 个答案:

答案 0 :(得分:0)

myList.getItemAtPosition(position)为您提供表示该位置的行的“Object”。简单地说,这是由您的CursorAdapter定义的。这实际上是一个Cursor对象,应按如下方式进行转换:

Cursor myCursor = (Cursor) myList.getItemAtPosition(position);

然后你必须从Cursor中的正确位置获取String(应该按照你把它放入适配器的顺序):

String myDesiredString = myCursor.getString(cursorPos);

其中cursorPos是一个整数,表示您希望获得的位置。

有关更多信息,这是一个非常类似的问题: getItemAtPosition() How to get readable data....

作为旁注,我个人更喜欢使用我自己的扩展BaseAdapter的适配器,这样我就可以更好地控制数据,甚至可以让适配器返回数据[比如定义像public String getEventName(int position)这样的方法] 。但是,这个上下文的最简单的解决方案就是我上面所描述的。

答案 1 :(得分:0)

拥有cursor对象可让您使用positionmoveToPosition()

获取该项目

试试这个:

cursor.moveToPosition(position);
cursor.getString(1); // OR
cursor.getInt(1);// OR whatever you need.

更多信息here