我遇到的每个示例/教程只是将字符串添加到ListViews,但我想添加膨胀的视图。我已经测试了膨胀的视图,如果我使用addView()将它添加到某个ViewGroup(如RelativeLayout),它看起来很好。但是将膨胀的视图添加到ListView只是以文本形式显示它:
ArrayList<View> friend_request_items = new ArrayList<View>(); //a list containing the items we want to add
ListView friend_request_list = (ListView) findViewById( R.id.friend_request_list );
ArrayAdapter<View> friend_request_adapter = new ArrayAdapter<View>( this, android.R.layout.simple_list_item_1, friend_request_items);
friend_request_list.setAdapter( friend_request_adapter );
//friend_template is just my own xml file containing the view I'm inflating
View friend_request_item = LayoutInflater.from(this).inflate(R.layout.friend_template, null);
friend_request_items.add( friend_request_item );
friend_request_adapter.notifyDataSetChanged();
我认为问题在于我已经进入适配器的布局,但我不知道要将其更改为什么(或者如果这甚至是解决方案)。
答案 0 :(得分:2)
这是一个使用自定义ArrayAdapter和自定义xml布局Using lists in Android的精彩教程。
你应该继承ArrayAdapter并在getView方法中扩展一行,这是一种常见而有效的解决方案,而不是将视图作为列表的泛型参数传递,你应该传递一个数据类,例如ArrayAdapter<FriendRequest>
或类似的东西
public class FriendRequestsAdapter extends ArrayAdapter<FriendRequest> {
private LayoutInflater inflater;
public FriendRequestsAdapter(Context context, List<FriendRequest> requests) {
super(context, R.layout.friend_request_row, requests);
this.inflater = ((Activity)context).getLayoutInflater();
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
if(convertView == null) {
convertView = inflater.inflate(R.layout.friend_request_row, parent, false);
}
FriendRequest item = getItem(position);
TextView textView = (TextView) convertView.findViewById(R.id.textView);
return convertView;
}
}
答案 1 :(得分:1)
我遇到的每个示例/教程都只是将字符串添加到ListViews
还有其他一些例子,但你不太可能找到你提议的例子。
我想添加膨胀的观点
ListAdapter
从getView()
方法返回“膨胀的视图”。您可以自行确定它是如何做到的。
此外,ListView
背后的要点是能够回收列表行Views
,因为列表可能很大,而且堆空间方面的行也很昂贵。您的代码似乎预先创建了所有行视图,这仅适用于小型数据集。
但是将膨胀的视图添加到ListView只是以文本的形式显示它
当ListView
在getView()
上调用ArrayAdapter
时,ArrayAdapter
获取所需行的模型,在其上调用toString()
,然后将其注入{ {1}}由您的其他构造函数参数标识(在这种情况下,TextView
格式为TextView
中定义的格式。)
我认为问题是我正在传递给适配器的布局,但我不知道要将其更改为什么(或者如果这甚至是解决方案)。
首先,我强烈建议您重新考虑原始思维方式(“我想添加膨胀的观点”)。请记住,您必须处理配置更改(例如,屏幕旋转,区域设置更改)和进程终止,并且您的“膨胀视图”在任何一种情况下都会消失。 android.R.id.simple_list_item_1
和ListView
旨在将模型数据转换为适当的可视化表示形式,并以符合内存的方式进行。
话虽如此,如果您完全相信整体方法,则需要创建自定义ListAdapter
或BaseAdapter
子类,其中ArrayAdapter
您返回所需的“膨胀”查看“给定getView()
。