Android:如何将对象列表传递到ListView

Android:如何将对象列表传递到ListView,android,android-listview,Android,Android Listview,我有课 public class User { UUID id; String name; } 我想传入ListView:列表并仅显示“名称”。 但是,当列表视图中的项目被选中时,我想知道所选项目的“id”。将对象存储到arraylist中,如 Arraylist<User> al = new ArrayList<User>(); 在onitemclick()中,单击该项,然后使用arraylist项显示该项 @Override public void o

我有课

public class User
{
   UUID id;
   String name;
}
我想传入ListView:列表并仅显示“名称”。
但是,当列表视图中的项目被选中时,我想知道所选项目的“id”。

将对象存储到arraylist中,如

Arraylist<User> al = new ArrayList<User>();
在onitemclick()中,单击该项,然后使用arraylist项显示该项

@Override
public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) {

Toast.makeText(this, "item clicked is " + arg2+al.get(arg2).id+"  "al.get(arg2).name,     
 Toast.LENGTH_SHORT)
 .show();
}
}
@覆盖
公共视图单击(AdapterView arg0、视图arg1、整型arg2、长型arg3){
Toast.makeText(单击的这个“项目”是“+arg2+al.get(arg2.id+”al.get(arg2.name),
吐司,长度(短)
.show();
}
}

首先,我将创建一个包含这两部分信息的类

public class MyItem {

public final String name;
public final String id;

public MyItem(String name, String id) {
    this.name = name;
    this.id = id;
 }

}
然后制作一个可支持此类的自定义适配器

public class CustomAdapter extends ArrayAdapter<MyItem> {

private Context context;
private ArrayList<MyItem> items;
private LayoutInflater vi;

public EntryAdapter(Context context,ArrayList<MyItem> items) {
    super(context,0, items);
    this.context = context;
    this.items = items;
    vi = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);

}


@Override
public View getView(int position, View convertView, ViewGroup parent) {
    View v = convertView;

    final Item i = items.get(position);
    if (i != null) {
            v = vi.inflate(R.layout.list_item, null); //custom xml for desired view
            //do what ever you need to

    }
    return v;
     }

     }
公共类CustomAdapter扩展了ArrayAdapter{
私人语境;
私有ArrayList项;
私人停车场6号;
公共入口适配器(上下文、ArrayList项){
超级(上下文,0,项);
this.context=上下文;
这个项目=项目;
vi=(LayoutInflater)context.getSystemService(context.LAYOUT\u充气机\u服务);
}
@凌驾
公共视图getView(int位置、视图转换视图、视图组父视图){
视图v=转换视图;
最终项目i=项目。获取(位置);
如果(i!=null){
v=vi.inflate(R.layout.list_item,null);//用于所需视图的自定义xml
//做任何你需要做的事
}
返回v;
}
}
填充MyItem的数组,然后使用该数组创建自定义适配器

items = new ArrayList<MyItem>(); // then populate it
myAdapter = new CustomAdapter(this, items);
items=new ArrayList();//然后填充它
myAdapter=新的CustomAdapter(此,项);
现在设置ListView并使用Listener

myList.setAdapter(myAdapter);

    myList.setOnItemClickListener(new OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> parentView, View view, int position,
                long id) 
        {
                ((MyItem)myAdapter.getItem(position)).id); //this line gets you the id of the clicked item

        }
    });
myList.setAdapter(myAdapter);
myList.setOnItemClickListener(新的OnItemClickListener(){
@凌驾
public void onItemClick(AdapterView父视图、视图视图、整型位置、,
长id)
{
((MyItem)myAdapter.getItem(position)).id);//此行获取单击项的id
}
});

请澄清您希望如何显示所选项目的id。如何将此ArrayList传递到ListView?您可以使用ListView.setAdapter(适配器);其中适配器可以是adapter=newarrayadapter(这是android.R.layout.simple\u list\u item\u 1,al);看一看,或者他们可能会很有用-数组中有我们的对象吗?是的,数组中有我的对象我们需要什么:UserSearchItem方法?哎呀,本来是一个构造函数,让我来修复。
myList.setAdapter(myAdapter);

    myList.setOnItemClickListener(new OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> parentView, View view, int position,
                long id) 
        {
                ((MyItem)myAdapter.getItem(position)).id); //this line gets you the id of the clicked item

        }
    });