当试图在活动中填充ArrayAdapter时,ArrayList与ArrayList的交互方式的概念使我有点困惑。
下面是一个让我有点困惑的指南示例:guides/wiki/Using-an-ArrayAdapter-with-ListView
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和一个新的适配器。
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
public class User {
public String name;
public String hometown;
public User(String name, String hometown) {
this.name = name;
this.hometown = hometown;
}
} 图像

发布于 2016-05-05 23:01:11
如果您在构造函数中查看您的UsersAdapter,您将看到实际上是将ArrayList<User> users作为最后一个参数传递给父类构造函数。
super(context, R.layout.item_user, users);ArrayAdaper保存对传入的用户列表的引用,并在内部使用它。如果您查看来自getItem(...)的ArrayAdapter所做的事情,它只是在指定索引处从列表中返回项。
public T getItem(int position) {
return mObjects.get(position); // mObjects references same ArrayList as users
}长话短说,在这种情况下,这与执行users.get(position)是一样的。
https://stackoverflow.com/questions/37061539
复制相似问题