Android 从ListView启动活动
我希望从上面的xyz类开始一个新的活动。当单击列表中的一个项目时,活动应开始。在下一个活动中,我希望显示“ListItem”对象的更多详细信息,即。s_img和sname; 是否有一种方法可以将单击的ListItem对象传递给下一个DisplayScheme活动?因为在下一个活动中无法找出在先前的活动中单击了哪个项目。提前谢谢 。。。。。。。。。。。。。。编辑Android 从ListView启动活动,android,android-intent,android-imageview,listactivity,Android,Android Intent,Android Imageview,Listactivity,我希望从上面的xyz类开始一个新的活动。当单击列表中的一个项目时,活动应开始。在下一个活动中,我希望显示“ListItem”对象的更多详细信息,即。s_img和sname; 是否有一种方法可以将单击的ListItem对象传递给下一个DisplayScheme活动?因为在下一个活动中无法找出在先前的活动中单击了哪个项目。提前谢谢 。。。。。。。。。。。。。。编辑 public class ListItem { public int sname; public int s_img; publi
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);
}
}
这是我编辑的onListItemClick。现在我在“intent.putextra”行上得到一个错误,该行表示“类型intent中的方法putextra(String,boolean)不适用于参数(String,Object)”
。。。。。。。。。。。。。。。。。更多编辑。。arrayadapter
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);
}
公共类MyAdapter扩展了BaseAdapter
{
充气机;
清单项目;
公共MyAdapter(活动上下文、列表项)
{
超级();
这个项目=项目;
this.inflater=(LayoutInflater)context.getSystemService(context.LAYOUT\u inflater\u SERVICE);
}
@凌驾
public int getCount()
{
//TODO自动生成的方法存根
返回items.size();
}
@凌驾
公共对象getItem(int位置)
{
//TODO自动生成的方法存根
返回null;
}
@凌驾
公共长getItemId(int位置)
{
//TODO自动生成的方法存根
返回0;
}
@凌驾
公共视图getView(最终整数位置、视图转换视图、视图组父视图)
{
ListItem=items.get(位置);
视图vi=转换视图;
if(convertView==null)
vi=充气机充气(R.layout.list_行,空);
ImageView imgv=(ImageView)vi.findViewById(R.id.s_名称);
imgv.setImageResource(item.sname);
返回vi;
}
}
这是我的MyAdapter类,我到底需要在哪里进行诸如“setTag()”或类似dat之类的更改?是的。这是可能的。您可以使用
setTag()
为适配器的getView()
方法中的每个列表项保留标识符,如setTag(position)
。因此,您可以从onClick()
方法中的视图中获取标记,然后使用诸如intent.putExtra(“positionIdentifier”,view.getTag())之类的附加功能将其发送到下一个活动代码>是的,您可以在启动活动时放置一些数据
此部件必须在McListener中
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;
}
}
在新的活动中
Intent intent = new Intent(CurrentClass.this, ActivityForStart.class);
intent.putExtra("name_of_variable", variable);
startActivity(intent);
这看起来很不错:
intent.getStringExtra("name_of_variable")));
但是,我不建议使用v.getContext()
而建议使用这个:xyz.this
此外,如果您不希望从DisplayScheme
活动返回结果,则无需使用startActivityForResult()
。您应该只使用startActivity()
并将intent
实例传递给它
如果您需要发送带有Intent
的数据,可以使用一个简单的Intent.putExtra(一些键名,您希望发送的值)代码>将为您完成此操作
如果要将数据发送到另一个活动,则无需使用startActivityForResult()
。当您想从另一个活动中获取某些结果时,可以使用它
编辑:
好的,在活动中,您还应该有相应的列表项
收集数据并传递到适配器,对吗?您还没有发布该活动的代码。但看看这是否有帮助。你可能得到处玩才能把事情做好
Toast.makeText(ListPage.this,items.get(position).sid,Toast.LENGTH_SHORT).show();
Intent intent = new Intent(v.getContext(),DisplayScheme.class);
startActivityForResult(intent,0);
如果在将数据传递到列表项之前使用POJO(setter和getter)来处理数据代码>,发布这些信息以及尽可能多的活动细节,这将更有帮助。它将v.getTag()视为一个对象。若您将标记值作为字符串,那个么您必须强制转换字符串并通过在v.getTag()之后放置“.toString()”来传递值
注意:它仅用于字符串传递。可以通过强制转换对其他值执行相同的操作
这是我编辑的onListItemClick。现在,我得到了一个错误的数据
“intent.putextra”行,表示“方法putextra(字符串,
类型意图中的布尔值)不适用于参数
(字符串、对象)
这是因为getTag()返回一个对象,这是因为您可以将任何您想要的东西放在那里
如果你在那里放了一个布尔值,只要在它上面加上一个石膏,你就可以开始了
如果你在那里放了其他东西(比如一个视盘),决定你想放什么,然后投下它
下面是一个简单的代码修改:
在适配器中:
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);
在适配器外部,在活动“xyz”中(您应该将其重命名为大写字母btw):
上面的eh有什么问题?有例外吗?没有错误。。。只是想知道如何将整个单击的对象传递给下一个活动。@AbhijeetLimaye顺便说一句,您可能需要接受解决问题的答案。在你问的六个问题中,甚至没有一个答案是你接受的。@Raghunandan:请原谅我的愚蠢,但我对stackoverflow真的是个新手。。。。。我该怎么做才能接受答案p你只需要点击解决问题的答案旁边的勾号。当您接受它时,它会变为绿色,这类似于它是一个已接受的答案,这反过来会帮助其他人找到稍后引用此内容的快速答案。您能告诉我您将标记放在哪里的代码或发布完整的活动代码吗?要使用此“getTag(),我是否首先需要“setTag()”或类似dat的内容?意图。额外(“项目”,项目[位置]);我刚刚在第行上面添加了一个错误,它说“表达式的类型必须是数组类型,但它已解析为列出[ListItem]”,发布适配器可能会有所帮助。您的文章没有显示如何处理ListView和适配器之间的数据。没有看到它们,就没有太多的东西可以使用了。还没有:(问题是,ListItem对象有三个字段,(string,i
@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
}
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);
}