Java 在ListView项上存储数据

Java 在ListView项上存储数据,java,android,listview,listviewitem,Java,Android,Listview,Listviewitem,首先,我是Android新手。所以这可能是一个非常简单的问题,但我自己找不到答案 我有两个活动,第一个是用用户名和从远程请求收到的其他数据填充,第二个是用来显示所选用户的详细信息 因此,在某种程度上,我需要将这些用户记录与ListView项相关联,这样我就可以使用Intent将其中的一些信息传递给第二个活动。我不确定这是对还是错,但我发现我需要创建一个自定义ArrayAdapter。因此,我创建了一个用户类: class User { public String id; public

首先,我是Android新手。所以这可能是一个非常简单的问题,但我自己找不到答案

我有两个活动,第一个是用用户名和从远程请求收到的其他数据填充,第二个是用来显示所选用户的详细信息

因此,在某种程度上,我需要将这些用户记录与ListView项相关联,这样我就可以使用Intent将其中的一些信息传递给第二个活动。我不确定这是对还是错,但我发现我需要创建一个自定义ArrayAdapter。因此,我创建了一个用户类:

class User {
   public String id;
   public String name;
}
我想现在我需要写一些东西,比如:

class UserAdapter extends ArrayAdapter<User> {
   ...
}
第二个将基于User.id发出另一个请求,并显示有关用户的一些信息,如:

John Doe, 45, San Francisco
我找不到类似的例子,所以我不太确定如何才能做到这一点。任何参考资料也会有所帮助


谢谢。

我建议使用Intent只传递所选用户的id。在第二个活动中,您可以使用该id从数据库或您正在使用的任何东西中获取其余信息。意图并不适合发送大量数据。

在UserAdapter的“getView”方法中,将视图的标记设置为有用的内容

view.setTag(id);
然后,当单击某个内容时,您可以将此信息拉出

@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
    Integer id = (Integer) view.getTag();
    // ...
}
@覆盖
public void onItemClick(AdapterView父对象、视图、整型位置、长id){
Integer id=(Integer)view.getTag();
// ...
}

假设您已经有一个填充了所需数据的数组列表:

ArrayList<User>
ArrayList
因此,在您的自定义ArrayAdapter类中,您应该具有以下功能:

private ArrayList<User> items;
private Context context;

public UserAdapter (Context context, int textViewResourceId, ArrayList<User> items) {
                super(context, textViewResourceId, items);
                this.items = items;
                this.context = context;
}
@Override
public View getView(int position, View view, ViewGroup parent) {
     User u = items.get(position);
     // Then you can get each user detail and 
     // display it however you like in your view
     u.getId();
     u.getName();
     // Assuming you have setters and getters setup in your User class
     return view;
}
私有数组列表项;
私人语境;
公共用户适配器(上下文上下文、int textViewResourceId、ArrayList项){
super(上下文、textViewResourceId、项);
这个项目=项目;
this.context=上下文;
}
@凌驾
公共视图getView(内部位置、视图视图、视图组父视图){
用户u=项目。获取(位置);
//然后您可以获得每个用户的详细信息和
//在视图中以您喜欢的方式显示它
u、 getId();
u、 getName();
//假设在用户类中设置了setter和getter
返回视图;
}

在OnClickItemListener中,可以使用“位置”来确定单击了哪个项,并使用它来检索用户对象。您应该能够在获得其他详细信息后检索它。

是的,这就是我计划要做的。但要了解单击了哪个项目,必须将该项目和用户记录关联起来。因此,我的问题是如何将该用户记录与ListView项相关联。
private ArrayList<User> items;
private Context context;

public UserAdapter (Context context, int textViewResourceId, ArrayList<User> items) {
                super(context, textViewResourceId, items);
                this.items = items;
                this.context = context;
}
@Override
public View getView(int position, View view, ViewGroup parent) {
     User u = items.get(position);
     // Then you can get each user detail and 
     // display it however you like in your view
     u.getId();
     u.getName();
     // Assuming you have setters and getters setup in your User class
     return view;
}