在我的(第一个)Android应用程序中,我有一个项目列表。每个项目都使用item.xml显示,其中我有一个RelativeLayout。在这个布局中,我定义了android:onClick="showItemDetails"
,其方法如下:
public void showItemDetails(View view) {
Intent intent = new Intent(this, itemDetails.class);
intent.putExtra("itemId", "5");
this.startActivity(intent);
}
正如你所看到的,我传递了一个硬编码的id,所以无论你当前点击什么项目,它显然只显示项目nr 5.我现在需要动态地给这个方法id。 itemList是在ItemListAdapter类中创建的,其中一部分是:
holder.description.setText(rowItem.eventDescription);
holder.amount.setText(rowItem.getDisplayAmount());
我的身份也在rowItem.id
之下,但我对自己应该做的事情感到很失落。
有人可以帮我一点吗?如何让列表项正确地将id传递给itemDetails类,我需要做什么?欢迎所有提示!
答案 0 :(得分:2)
前几个假设:
Fragments
的{{1}} Activity
OuterActivityClass
var有typ rowItem
RowItemClass
正在延长ItemListAdapter
ArrayAdapter<RowItemClass>
没有自己的ItemListAdapter
字段,List<RowItemClass>
中的rowItem
被指定为getView(...)
而不是{{1} (我不知道为什么Ppls使用这样的字段,因为rowItem = getItem(possition);
已经在内部)...如果你这样做“坏”,用rowItem = yourListFieldInAdapter.get(position);
替换我的答案中的所有ArrayAdapter<?>
次出现getItem(possition)
的id字段为long或int(如果不使用“或:”版本)你需要做什么:
yourListFieldInAdapter.get(position)
RowItemClass
android:onClick
:item.xml
hasStableIds()
ItemListAdapter
:public boolean hasStableIds () { return true; }
getItemId(...)
public long getItemId (int position) { return getItem(position).id; }
获取ListView:Activity
代码:
onCreate(...)
或:
ListView listView = findViewById(R.id.your_listview_id);
使用第二种方法,您可以省略第2点和第3点。(如果您使用“错误”方式来覆盖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);
}
});
)和getItem
({{1}在你的适配器实现中)
Offtopic提示:请勿使用小写作为类名return yourListFieldInAdapter.get(pos)
=&gt;中的第一个字母getCount
...为了你的理智:)(OMG,OMG,itemDetails是变量或类名)
答案 1 :(得分:0)
In your Main Activity
String item = country.getName();
Intent intent= new Intent(MainActivityActivity.this,AnotherActivity.class);
intent.putExtra(EXTRA_RESPONSE, item);
startActivity(intent);
In Next Activity
String country = getIntent().getStringExtra(MainActivity.EXTRA_COUNTRY);
TextView textView = (TextView) findViewById(R.id.tvPhone);
textView.setText(country);
答案 2 :(得分:-2)
如果我正确理解了您的问题,那么您可能会尝试在适配器中设置OnClickListener(不要在xml中设置onClick)。在适配器中尝试类似:
public View getView(int position, View convertView, ViewGroup parent) {
...
View rootLayout = convertView.findViewById(R.id.item_layout_root);
...
rootLayout.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
showItemDetails(rowItem.id);
}
});
return convertView;
你的showItemDetails将改为
showItemDetails(int id) {
Intent intent = new Intent(this, itemDetails.class);
intent.putExtra("itemId", id);
this.startActivity(intent);
}