首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在自定义.setAdapter适配器场景中调用ArrayList时,操作流程是什么?

在自定义.setAdapter适配器场景中调用ArrayList时,操作流程是什么?
EN

Stack Overflow用户
提问于 2016-05-05 22:48:47
回答 1查看 221关注 0票数 1

当试图在活动中填充ArrayAdapter时,ArrayList与ArrayList的交互方式的概念使我有点困惑。

下面是一个让我有点困惑的指南示例:guides/wiki/Using-an-ArrayAdapter-with-ListView

代码语言:javascript
复制
public class UsersAdapter extends ArrayAdapter<User> {
    // View lookup cache
    private static class ViewHolder {
        TextView name;
        TextView home;
    }

    public UsersAdapter(Context context, ArrayList<User> users) {
       super(context, R.layout.item_user, users);
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
       // Get the data item for this position

       >>>>>>> User user = getItem(position); <<<<<<<<<

       // Check if an existing view is being reused, otherwise inflate the view
       ViewHolder viewHolder; // view lookup cache stored in tag
       if (convertView == null) {
          viewHolder = new ViewHolder();
          LayoutInflater inflater = LayoutInflater.from(getContext());
          convertView = inflater.inflate(R.layout.item_user, parent, false);
          viewHolder.name = (TextView) convertView.findViewById(R.id.tvName);
          viewHolder.home = (TextView) convertView.findViewById(R.id.tvHome);
          convertView.setTag(viewHolder);
       } else {
           viewHolder = (ViewHolder) convertView.getTag();
       }
       // Populate the data into the template view using the data object
       viewHolder.name.setText(user.name);
       viewHolder.home.setText(user.hometown);
       // Return the completed view to render on screen
       return convertView;
   }
}

例如,假设我在activity方法中创建了一个onCreate和一个新的适配器。

代码语言:javascript
复制
protected void onCreate(Bundle savedInstanceState) {
   ArrayList<User> myArray = new ArrayList<User>(); 
   User foobar = new User(); 
   myArray.add(foobar); // Adds my new user to the arrayList

   ArrayAdapter helperAdapter = new ArrayAdapter(this, myArray);

   ListView lv = (ListView) findViewById(R.id.feed);
   lv.setAdapter(helperAdapter);
}

调用方法setAdapter(helperAdapter)后,如何使用ArrayList方法中的getItem(position)调用查询其对象?

我没有看到任何对我的ArrayList的引用,我只看到了存储在临时User对象中的对象数据,我只是有点不知道这是如何发生的(我附上了一张图片,试图解释我迷失了什么地方)。

User.java

代码语言:javascript
复制
public class User {
public String name;
public String hometown;

public User(String name, String hometown) {
   this.name = name;
   this.hometown = hometown;
   }
 }  

图像

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-05-05 23:01:11

如果您在构造函数中查看您的UsersAdapter,您将看到实际上是将ArrayList<User> users作为最后一个参数传递给父类构造函数。

代码语言:javascript
复制
super(context, R.layout.item_user, users);

ArrayAdaper保存对传入的用户列表的引用,并在内部使用它。如果您查看来自getItem(...)ArrayAdapter所做的事情,它只是在指定索引处从列表中返回项。

代码语言:javascript
复制
public T getItem(int position) {
    return mObjects.get(position); // mObjects references same ArrayList as users
}

长话短说,在这种情况下,这与执行users.get(position)是一样的。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37061539

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档