1
我一直在寻找答案,希望有人能帮助我。Android从上下文菜单中选择错误的数据
我有一段代码应该从一个从SQLite数据库创建的ListView中选择一个项目,并将其返回给一个字符串,以便我可以运行SQL命令从数据库中删除记录。然而,当点击条目时,它会从下面的条目中返回数据而不是所选的条目,所以我相信它是在错误的索引上选择的。
如果有3个条目,说亚当,鲍勃和查理,如果我点击亚当,它会返回鲍勃的字符串;如果我点击鲍勃,它会返回查理;如果我点击查理它会抛出一个IndexOutOfBoundsException!
我的代码如下:
public class viewdb extends ListActivity {
private static final int DELETE_ID = Menu.FIRST + 1;
private static final int EDIT_ID = Menu.FIRST + 2;
private ArrayList<String> results = new ArrayList<String>();
private String tableName = DBAdapter.DATABASE_TABLE;
private SQLiteDatabase newDB;
String strfieldName;
String strSelFN;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Log.d("CalledActivity", "OnCreate");
Intent in = new Intent();
openAndQueryDatabase();
displayResultList();
registerForContextMenu(getListView());
}
public void displayResultList() {
TextView tView = new TextView(this);
tView.setText("Fields in Database");
getListView().addHeaderView(tView);
setListAdapter(new ArrayAdapter<String>(this,
android.R.layout.simple_list_item_1, results));
getListView().setTextFilterEnabled(true);
}
public void openAndQueryDatabase() {
try {
DatabaseHelper dbHelper = new DatabaseHelper(
this.getApplicationContext());
newDB = dbHelper.getWritableDatabase();
Cursor c = newDB.rawQuery("SELECT Field_Name FROM " + tableName,
null);
if (c != null) {
if (c.moveToFirst()) {
do {
strfieldName = c.getString(c.getColumnIndex("Field_Name"));
results.add(strfieldName);
} while (c.moveToNext());
}
}
} catch (SQLiteException se) {
Log.e(getClass().getSimpleName(),
"Could not create or open the database");
newDB.close();
}
}
@Override
protected void onListItemClick(ListView l, View v, int position, long id) {
super.onListItemClick(l, v, position, id);
Object o = this.getListAdapter().getItem(position);
strSelFN = o.toString();
getListView().showContextMenu();
}
@Override
public void onCreateContextMenu(ContextMenu menu, View v,
ContextMenuInfo menuInfo) {
super.onCreateContextMenu(menu, v, menuInfo);
menu.setHeaderTitle("Entry Menu");
menu.add(Menu.NONE, EDIT_ID, Menu.NONE, R.string.strEdit);
menu.add(Menu.NONE, DELETE_ID, Menu.NONE, R.string.strDelete);}
@Override
public boolean onContextItemSelected(MenuItem item) {
if (item.getItemId() == DELETE_ID) {
// newDB.execSQL("DELETE FROM " + tableName +
// " WHERE Field_Name = '" + strSelFN + "'");
Toast.makeText(this, "Field Deleted: " + strSelFN,
Toast.LENGTH_LONG).show();
return true;
}
return false;
}
}
我还没有定义EDIT_ID但作为需要DELETE_ID功能主要工作。
感谢
完美,谢谢dokkaebi! – CSUK