我正在为每个项目设置一个带有 onClickListener 的 ListView。这是在 AsyncTask 的 onPostExecute() 函数中设置的; ListView 中的每个项目都应该启动一个 Activity 来查看 Intent 中设置的数据。数据来自任意长度的ArrayList。 ListView 中的所有项目仅启动 ArrayList 中的最后一个项目。
listViewAdapter = new ListViewAdapter(RegisterActivity.this, userNames, reporNames);
localListView.setAdapter(listViewAdapter);
for(final Object s : objects){
localListView.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> arg0, View arg1, int position, long arg3) {
final Intent localIntent = new Intent(RegisterActivity.this, ViewObjectActivity.class);
localIntent.putExtra("id", s.getId());
localIntent.putExtra("permission", s.getPermission());
localIntent.putExtra("lattitude", s.getLattitude());
localIntent.putExtra("longitude", s.getLongitude());
startActivityForResult(localIntent, VIEW_SIT_REP_REQUEST);
}
});
}
listViewAdapter 非常简单。它是 BaseAdapter 的扩展。
当它是线性布局中的按钮并且它是一个 OnTouchListener 时,我就可以使用它了。不知道我改变了什么来打破它,但现在已经工作了 3 个小时。有什么建议么?提前致谢。
最佳答案
您不需要将多个 OnItemClickListener
附加到 ListView
,因为单个 OnItemClickListener
将适用于所有项目。只需使用 position
参数从集合中引用正确的对象:
localListView.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> arg0, View arg1, int position, long arg3) {
final Intent localIntent = new Intent(RegisterActivity.this, ViewObjectActivity.class);
localIntent.putExtra("id", objects[position].getId());
localIntent.putExtra("permission", objects[position].getPermission());
localIntent.putExtra("lattitude", objects[position].getLattitude());
localIntent.putExtra("longitude", objects[position].getLongitude());
startActivityForResult(localIntent, VIEW_SIT_REP_REQUEST);
}
});
关于java - ListView 的 OnClickListener,为每个 onItemClick 提供来自 ArrayList 的新 Intent 数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27572836/