我刚才开始学习android示例示例。我遇到了一个问题。
public class ContactActivity extends ListActivity implements OnItemClickListener {
private Cursor mCursor;
private ListAdapter mAdapter;
private static final String[] mContent = new String[]{
ContactDbHelper._ID,ContactDbHelper.NAME,ContactDbHelper.PHONE
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mCursor = managedQuery(ContactProvider.CONTENT_URI, mContent, null, null, null);
mAdapter = new SimpleCursorAdapter(this, R.layout.main, mCursor,
new String[]{ ContactDbHelper.NAME, ContactDbHelper.PHONE },
new int[]{ R.id.name, R.id.phone } );
setListAdapter(mAdapter);
getListView().setChoiceMode(ListView.CHOICE_MODE_SINGLE);
getListView().setOnItemClickListener(this);
}
@Override
public void onItemClick(AdapterView<?> arg0, View arg1, int position, long id) {
Log.i("position: ", "" + position);
Log.i("id", "" + id);
setSelection(position);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
long id = this.getSelectedItemId();
Log.i("id: ", "" + id);
switch(item.getItemId()) {
case IDM_ADD: { CallAddContactDialog(); } break;
case IDM_EDIT: if(id > 0) { CallEditContactDialog(id); }
else {
Toast.makeText(this,R.string.toast_notify,Toast.LENGTH_SHORT).show();
} break;
case IDM_DELETE: if (id > 0) { CallDeleteContactDialog(id); } else {
Toast.makeText(this, R.string.toast_notify, Toast.LENGTH_SHORT).show();
} break;
}
return super.onOptionsItemSelected(item);
}
}
这里写的是this.getSelectedItemId()
,代码返回INVALID_ROW_ID,我读了documentation,但我找不到任何方法来解决它。我需要添加什么来解决问题?一般来说this.getSelectedItemId()返回了什么?提前谢谢!
修改
我的xml文件如下:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent" >
<TextView
android:id="@+id/name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:textSize="18sp"/>
<TextView
android:id="@+id/phone"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:textSize="18sp"
android:paddingRight="10dp"/>
</RelativeLayout>
答案 0 :(得分:2)
当您在列表视图中选择项目时getSelectedItemId ()
会返回所选项目的_id,如果未选择任何项目,则返回INVALID_ROW_ID。
您需要实施OnItemClickListener
并在onItemClick
调用setSelection(position)
,然后您的代码就可以使用。
答案 1 :(得分:1)
修改强>
你使用的是错误的方法;对于ListView,您需要设置OnClickListener
。此方法适用于活动的菜单。
请改用item.getItemId()
。这是一个例子:
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.menu.do_stuff: {
// Do stuff
} case R.menu.do_stuff2: {
// Do other stuff
}
}
}