从ListView启动活动

时间:2013-05-04 07:57:53

标签: android android-intent android-imageview listactivity

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

5 个答案:

答案 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);
  }