我为每个项目设置了一个带有onClickListener的ListView。这是在AsyncTask中的onPostExecute()函数中设置的;列表视图中的每个项目都应启动一个活动,该活动可查看在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个小时。有什么建议?提前谢谢。
答案 0 :(得分:2)
您无需将多个OnItemClickListeners
附加到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);
}
});
答案 1 :(得分:0)
您的listview项目布局行中可能有一些按钮。 因为你正在写作,当它是一个线性布局的按钮时,我就有了这个工作。
行中的按钮正在窃取焦点,onItmeClick无法正常工作。
您可以使行布局中的按钮无法聚焦 android.focusable =&#34; false&#34; ,这可以修复onItemClick未被调用的问题