前几个假设:
- 你不
Fragments
只是使用普通Activity
的调用OuterActivityClass
rowItem
var 有类型RowItemClass
- 你
ItemListAdapter
正在扩展ArrayAdapter<RowItemClass>
- 你做的“正确”(
ItemListAdapter
没有自己的List<RowItemClass>
字段,rowItem
ingetView(...)
被分配得rowItem = getItem(possition);
不像rowItem = yourListFieldInAdapter.get(position);
(我不知道为什么 Ppls 使用这样的字段,因为ArrayAdapter<?>
内部已经有它)......如果你这样做“不好”,请替换getItem(possition)
我的所有出现回答yourListFieldInAdapter.get(position)
- id 字段
RowItemClass
为 long 或 int(如果不使用“或:”版本)
你必须做的:
- 摆脱
android:onClick
_item.xml
- 覆盖:
hasStableIds()
_ItemListAdapter
public boolean hasStableIds () { return true; }
getItemId(...)
在适配器中覆盖:public long getItemId (int position) { return getItem(position).id; }
- 在
Activity
onCreate(...)
获取列表视图中:ListView listView = findViewById(R.id.your_listview_id);
- 然后将侦听器分配给您的 listView(也在 onCreate 中)
代码:
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
void onItemClick(AdapterView<?> parent, View view, int position, long id){
Intent intent = new Intent(OuterActivityClass.this, itemDetails.class);
intent.putExtra("itemId", id + ""); //+ "" to make it string, of course you can use long but you have to remeber to use intent.getLongExtra(...) in details Activity
startActivity(intent);
}
});
或者:
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
void onItemClick(AdapterView<?> parent, View view, int position, long id){
final RowItemClass clickedItem = (RowItemClass)parent.getItemAtPosition(position);
Intent intent = new Intent(OuterActivityClass.this, itemDetails.class);
intent.putExtra("itemId", clickedItem.id + "");
startActivity(intent);
}
});
使用第二种方法,您可以省略第 2 点和第 3 点(如果您在适配器实现中使用“坏”方式来覆盖getItem
( return yourListFieldInAdapter.get(pos)
) 和getCount
( ))
return yourListFieldInAdapter.size()
题外话提示:不要在类名中使用小写字母itemDetails
=> ItemDetails
...为了你的理智:)(OMG,OMG,itemDetails 是变量或类名)