我正在android eclipse中写一个笔记记录应用程序。我的应用程序当前从SQLite数据库中选择所有注释,并使用它们填充ListView。此ListView是可单击的,并且当前将用户重定向到EditNote活动。
但是,我希望能够根据单击的ListView注释的ID填充EditNote活动中的EditTexts。
(因此,如果我点击第一个ListView项目并且它的ID为2,则值2将传递给EditNote)
这需要获取被单击的ListView项的ID,然后使用.putExtra()传递它;到EditNote活动。
所以我的问题是:如何获取ID然后将其传递给EditNote活动?这样我就可以使用该ID对该活动进行额外的查询。
非常感谢你的时间。 我会尽我所能回答任何其他问题。
初始化事项
DatabaseHelper dbh;
ArrayList<String> listItems = new ArrayList<String>();
ArrayAdapter<String> adapter;
Context mCtx;
ListView lv;
使用onClickListeners的onCreate方法
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
refreshData();
mCtx = this;
lv = getListView();
lv.setOnItemClickListener(new OnItemClickListener() {
public void onItemClick(AdapterView<?> arg0, View view,
int position, long id) {
Intent i = new Intent(mCtx, EditNote.class);
i.putExtra("ID", listItems.get(position));
startActivity(i);
}
});
refreshData方法(用于填充ListView)
public void refreshData(){
dbh = new DatabaseHelper(this);
dbh.open();
adapter = new ArrayAdapter<String> (this, android.R.layout.simple_list_item_1, listItems);
setListAdapter(adapter);
ArrayList<String[]> searchResult = new ArrayList<String[]>();
//EditText searchTitle = (EditText) findViewById(R.id.searchC);
listItems.clear();
searchResult = dbh.fetchNotes("");
//searchResult = dbh.fetchNotes(searchTitle.getText().toString());
String title = "", note = "", id = "";
for (int count = 0 ; count < searchResult.size() ; count++) {
note = searchResult.get(count)[2];
title = searchResult.get(count)[1];
id = searchResult.get(count)[0];
listItems.add(title);
}
adapter.notifyDataSetChanged();
}
/*private void setID(String setID) {
this.id = setID;
}
private String getID(){
return id;
}*/
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
if (id == R.id.action_settings) {
return true;
}
return super.onOptionsItemSelected(item);
}
DatabaseHelper活动 - fetchNotes - 用于查询数据库
public ArrayList<String[]> fetchNotes(String title) throws SQLException {
ArrayList<String[]> myArray = new ArrayList<String[]>();
int pointer = 0;
Cursor mCursor = mDb.query(TABLE_NAME, new String[] {"_id", "title",
"note"}, null, null,
null, null, "_id");
int idColumn = mCursor.getColumnIndex("_id");
int titleColumn = mCursor.getColumnIndex("title");
int noteColumn = mCursor.getColumnIndex("note");
if (mCursor != null){
//If possible move to the first record within the cursor
if (mCursor.moveToFirst()){
do {
//for each record add a new string array to our Array List
myArray.add(new String[3]);
//
myArray.get(pointer)[0] = mCursor.getString(idColumn);
//Save the note into the string array
myArray.get(pointer)[1] = mCursor.getString(titleColumn);
//Save the title into the string array
myArray.get(pointer)[2] = mCursor.getString(noteColumn);
//increment our pointer variable.
pointer++;
} while (mCursor.moveToNext()); // If possible move to the next record
} else {
myArray.add(new String[3]);
myArray.get(pointer)[0] = "";
myArray.get(pointer)[1] = "";
myArray.get(pointer)[2] = "";
}
}
return myArray;
}
此处还有我的创建表格,以防万一
private static final String DATABASE_CREATE =
"CREATE TABLE " + TABLE_NAME + " (" +
"_id INTEGER PRIMARY KEY AUTOINCREMENT, " +
"title TEXT NOT NULL, " +
"note TEXT NOT NULL); ";
答案 0 :(得分:0)
我会尽力帮助您,我认为您的代码可以更加优化......
只是返回光标而不是创建ArrayList,如果你假设你在这里创建了ArrayList并且它在你使用listItems ArrayList的调用函数中再次占用了100个条目...我知道android有垃圾收集器但是如果有选择可以避免使用呢?
你的myArray是String [] ArrayList但是你的listItems不是因此你只能访问这个标题因为这是你在这里存储的listItems.add(title);
一个。因此,您可以直接在fetchNotes()中使用listItems,如MainActivity.listitems
(假设在MainActivity类中声明listItem),在将ArrayList<String[]> listItems=new ArrayList<String[]>();
声明为public static ArrayList<String[]> listItems=new ArrayList<String[]>();
之后使用
或
湾你只需返回光标,就像listItems上的myArray操作一样。
现在您可以访问&#34; id&#34;通过引用您在listItems中存储id的索引。
listItems.get(position)[2]
(假设您将id存储在索引2处)。
我尽量保持简单,并期望它会帮助你......
答案 1 :(得分:0)
不确定我完全理解这一点。你没有传递“标题”,你的数据库助手可以使用“标题”获取结果吗?这不起作用还是要通过传递ID来优化它?即使您想传递ID,也可以使用相同的机制来实现。