当尝试在 Activity 中填充 ListView 时,我对 ArrayAdapter 如何与我的 ArrayList 交互的概念感到有点困惑。
这是一个让我有点困惑的指南示例: https://github.com/codepath/android_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 方法中创建了一个 ArrayList 和一个新的 Adapter。
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)
查询其对象来电getView()
方法?
我没有看到任何对我的 ArrayList 的引用,我只看到对象数据存储在临时 User
中对象,我只是有点迷失了这是怎么发生的(我附上了一张照片试图帮助解释我迷路的地方)?
用户.java
public class User {
public String name;
public String hometown;
public User(String name, String hometown) {
this.name = name;
this.hometown = hometown;
}
}
最佳答案
如果您查看 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)
是一样的在这种情况下。
关于java - 在 Custom ArrayList Adapter 场景中调用 .setAdapter 时的操作流程是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37061539/