在ListView项上存储数据

时间:2010-10-08 01:57:46

标签: java android listview listviewitem

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

我有两个Activity,我正在填写第一个用户名和我从远程请求收到的其他数据,第二个用于显示所选用户的详细信息。

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

class User {
   public String id;
   public String name;
}

我猜我现在需要写一些类似的东西:

class UserAdapter extends ArrayAdapter<User> {
   ...
}

基本上在我要显示的第一个视图中:

John Doe
Mike Brown
...

第二个将根据User.id发出另一个请求,并显示有关用户的一些信息,如:

John Doe, 45, San Francisco

我找不到类似的例子,所以我不太清楚我该怎么做。任何参考也会有所帮助。

感谢。

3 个答案:

答案 0 :(得分:2)

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

view.setTag(id);

然后,您可以在点击某些内容时提取此信息...

@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
    Integer id = (Integer) view.getTag();
    // ...
}

答案 1 :(得分:1)

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

ArrayList<User>

因此,在您的自定义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;
}

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

答案 2 :(得分:0)

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