使用以下代码,当从列表中选择一个项目时,它会更新数据表。问题是,当列出多个项目时,无论选择哪一个,它都会更新显示的第一个列出的项目,而不是选择的项目。提前感谢!
已编辑更新。合并(位置)并试图简化一些代码。仍然不会捕获所选项目,始终返回列表视图中显示的顶部项目。DB控制器工作正常,除此之外其他一切都很好。。。
setContentView(R.layout.list_messages);
ArrayList<HashMap<String, String>> phraseList = controller
.getUnreadMessage();
ListView lv = getListView();
ListAdapter adapter = new SimpleAdapter(
ReadUnReadMessages.this,
phraseList,
R.layout.view_list_messages,
new String[] { "mFromName", "mToAddress", "mBody",
"mToName", "messageTime", "mFromAddress", "mRead",
"messageId" },
new int[] { R.id.messageFrom, R.id.messageToAdd,
R.id.messageBody, R.id.messageTo, R.id.messageTime,
R.id.messageFromAdd, R.id.readCode, R.id.messageId });
setListAdapter(adapter);
lv.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view,
int position, long arg) {
@SuppressWarnings("unchecked")
HashMap<String, String> queryValues = (HashMap<String, String>)parent.getItemAtPosition(position);
messageBody = (TextView) findViewById(R.id.messageBody);
readCode = (TextView) findViewById(R.id.readCode);
messageId = (TextView) findViewById(R.id.messageId);
String readCode = "1";
queryValues
.put("messageId", messageId.getText().toString());
queryValues.put("mRead", readCode);
queryValues.put("mBody", messageBody.getText().toString());
controller.markMessage(queryValues);
this.callSplash(view);
}
public void callSplash(View view) {
Intent objSplash = new Intent(getApplicationContext(),
Splash.class);
startActivity(objSplash);
}
});
很难准确地说出你期望它如何工作,但你的核心问题似乎是忽略了onItemClick的"position"参数。这是安卓系统告诉你点击了哪个项目的方式。不知何故,您需要将该参数或首先从适配器获取的相应项对象传递给从onItemClick:调用的函数
this.insertData(position);
否则,这些函数将不得不猜测点击了哪个项目。显然,这就是他们正在做的:他们假设第一个项目被点击了。