public class ListItem
{
public int sname;
public int s_img;
public String sid;
}
Class xyz extends ListActivity
{
.
.
.
protected void onListItemClick(ListView l, View v, int position, long id)
{
//super.onListItemClick(l, v, position, id);
Toast.makeText(ListPage.this,items.get(position).sid,Toast.LENGTH_SHORT).show();
Intent intent = new Intent(v.getContext(),DisplayScheme.class);
startActivityForResult(intent,0);
}
}
我希望从上面的xyz类开始一个新的Activity。单击列表中的某个项目时,应启动活动。在下一个Activity中,我希望显示“ListItem”对象的更多详细信息。 s_img和sname; 有没有办法将CLICKED ListItem对象传递给下一个DisplayScheme活动?因为在下一个Activity中没有办法找出在之前的活动中点击了哪个项目。提前谢谢。
..............编辑...............
protected void onListItemClick(ListView l, View v, int position, long id)
{
//super.onListItemClick(l, v, position, id);
Toast.makeText(ListPage.this, items.get(position).sid, Toast.LENGTH_SHORT).show();
Intent intent = new Intent(v.getContext(),DisplayScheme.class);
intent.putExtra("positionIdentifier",v.getTag());
startActivityForResult(intent,0);
}
这是我编辑的onListItemClick。现在我在“intent.putextra”行上出现错误,该行说明“Intent类型中的方法putExtra(String,boolean)不适用于参数(String,Object)”
................. more edits .. arrayadapter ................
public class MyAdapter extends BaseAdapter
{
LayoutInflater inflater;
List<ListItem> items;
public MyAdapter(Activity context, List<ListItem> items)
{
super();
this.items = items;
this.inflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}
@Override
public int getCount()
{
// TODO Auto-generated method stub
return items.size();
}
@Override
public Object getItem(int position)
{
// TODO Auto-generated method stub
return null;
}
@Override
public long getItemId(int position)
{
// TODO Auto-generated method stub
return 0;
}
@Override
public View getView(final int position, View convertView, ViewGroup parent)
{
ListItem item = items.get(position);
View vi=convertView;
if(convertView==null)
vi = inflater.inflate(R.layout.list_row, null);
ImageView imgv = (ImageView)vi.findViewById(R.id.s_name);
imgv.setImageResource(item.sname);
return vi;
}
}
这是我的MyAdapter类,我在哪里需要进行像“setTag()”这样的更改?或者像dat这样的东西?
答案 0 :(得分:1)
这个看起来很不错:
Toast.makeText(ListPage.this,items.get(position).sid,Toast.LENGTH_SHORT).show();
Intent intent = new Intent(v.getContext(),DisplayScheme.class);
startActivityForResult(intent,0);
但是,我建议不要使用v.getContext()
,而是使用xyz.this
。
此外,如果您不期望从DisplayScheme
活动返回结果,则无需使用startActivityForResult()
。您应该只使用startActivity()
并将intent
实例传递给它。
如果您需要使用Intent
发送数据,则可以使用简单的intent.putExtra(SOME_KEY_NAME, THE_VALUE_YOU_WANT_TO SEND);
为您执行此操作。
如果要将数据发送到另一个活动,则无需使用startActivityForResult()
。当您想从另一个Activity获取某些结果时,可以使用它。
编辑:
好的,所以在Activity中你还应该有相应的List<ListItem> items;
来收集数据并传递给适配器吗?您还没有发布该活动的代码。但看看这是否有帮助。你可能不得不四处游玩才能搞定。
Toast.makeText(ListPage.this,items.get(position).sid,Toast.LENGTH_SHORT).show();
Intent intent = new Intent(v.getContext(),DisplayScheme.class);
intent.putExtra("SOME_KEY_NAME", items.get(position).sname;
startActivityForResult(intent,0);
如果您在将数据传递给List<ListItem> items;
之前使用POJO( setter和getter )来处理数据,请尽可能多地发布活动中的数据和详细信息帮助更多。
答案 1 :(得分:0)
是。有可能的。您可以使用setTag()
为适配器的getView()
方法中的每个列表项保留标识符,例如setTag(position)
。因此,您可以使用onClick()
方法从视图中获取代码,然后使用intent.putExtra("positionIdentifier",view.getTag());
等附加内容将其发送到下一个活动
答案 2 :(得分:0)
是的,您可以在开始活动时添加一些数据
此部分必须位于OnItemClickListener
中Intent intent = new Intent(CurrentClass.this, ActivityForStart.class);
intent.putExtra("name_of_variable", variable);
startActivity(intent);
在新活动中
intent.getStringExtra("name_of_variable")));
答案 3 :(得分:0)
它将v.getTag()视为一个对象。如果您将标记值作为字符串,那么您必须通过在v.getTag()之后添加“.toString()”来强制转换为字符串并传递值。
注意:它仅用于String传递。您可以通过强制转换为其他值执行相同操作。
答案 4 :(得分:0)
这是我编辑的onListItemClick。现在我收到了错误 “intent.putextra”行说“方法putExtra(字符串, Intent类型中的boolean)不适用于参数 (String,Object)“
这是因为getTag()返回一个对象,这是因为你可以把它放在任何你想要的地方。
如果你已经放置了一个布尔值,只需在其上放置一个强制转换就可以了。
如果你把其他东西放在那里(比如一个viewHolder),那就决定你要放什么,然后把它投去。
这是对您的代码的简单修改:
适配器中的:
@Override
public ListItem getItem(int position)
{
return items.get(position);
}
@Override
public View getView(final int position, View convertView, ViewGroup parent)
{
ListItem item = getItem(position);
//... same as before, but please use viewHolder
}
在适配器外部,在活动“xyz”中(您应该将其重命名为大写字母btw):
protected void onListItemClick(ListView l, View v, int position, long id)
{
super.onListItemClick(l, v, position, id);
Intent intent = new Intent(this,DisplayScheme.class);
intent.putExtra("selectedImageToShow",_adapter.getItem(position).s_img);
startActivityForResult(intent,0);
}