0
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。在下一个活动中,我希望显示“ListItem”对象的更多详细信息,即。s_img 和 sname;有没有办法可以将 CLICKED ListItem 对象传递给下一个 DisplayScheme 活动?因为在下一个活动中无法找出在之前的活动中单击了哪个项目。提前致谢。

............. 已编辑 ....

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)”

..................更多编辑..数组适配器......

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 的东西?

4

5 回答 5

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

此外,如果您不期望DisplaySchemeActivity 返回结果,则无需使用startActivityForResult(). 您应该只使用startActivity()并将 intent实例传递给它。

如果您需要使用 发送数据Intent,一个简单的intent.putExtra(SOME_KEY_NAME, THE_VALUE_YOU_WANT_TO SEND);程序会为您完成。

startActivityForResult()如果您想将数据发送到另一个 Activity,则不需要使用。当你想从另一个 Activity 取回一些结果时,你可以使用它。

编辑:

好的,所以在 Activity 中你也应该有相应List<ListItem> items;的收集数据并传递给 Adapter 对吧?您还没有为 Activity 发布该代码。但看看这是否有帮助。您可能需要四处玩耍才能做到正确。

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);

如果您在将数据传递给之前使用 POJO(setter 和 getter)来处理数据,那么List<ListItem> items;在 Activity 中发布该数据以及尽可能多的详细信息会更有帮助。

于 2013-05-04T08:09:18.333 回答
0

是的。有可能的。您可以使用在适配器setTag()的方法中为每个列表项保留一个标识符,例如. 因此,您可以从方法中的视图中获取标签,然后将其发送到下一个活动,其中包含额外的内容,例如getView()setTag(position)onClick()intent.putExtra("positionIdentifier",view.getTag());

于 2013-05-04T08:00:38.270 回答
0

是的,您可以在开始活动时放入一些数据

这部分必须在 OnItemClickListener

Intent intent = new Intent(CurrentClass.this, ActivityForStart.class);
intent.putExtra("name_of_variable", variable);
startActivity(intent);

在新活动中

intent.getStringExtra("name_of_variable")));
于 2013-05-04T08:07:43.620 回答
0

它认为 v.getTag() 是一个对象。如果您将标签值作为字符串,那么您必须通过在 v.getTag() 之后放置“.toString()”来转换字符串并传递值。

注意:它仅用于字符串传递。您可以通过强制转换对其他值执行相同的操作。

于 2013-05-04T08:21:18.133 回答
0

这是我编辑的 onListItemClick。现在我在“intent.putextra”行上收到一个错误,上面写着“Intent 类型中的 putExtra(String, 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);
  }
于 2013-05-04T08:22:49.390 回答