Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/189.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 从ListView启动活动_Android_Android Intent_Android Imageview_Listactivity - Fatal编程技术网

Android 从ListView启动活动

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

我希望从上面的xyz类开始一个新的活动。当单击列表中的一个项目时,活动应开始。在下一个活动中,我希望显示“ListItem”对象的更多详细信息,即。s_img和sname; 是否有一种方法可以将单击的ListItem对象传递给下一个DisplayScheme活动?因为在下一个活动中无法找出在先前的活动中单击了哪个项目。提前谢谢

。。。。。。。。。。。。。。编辑

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