Android 如何将视图添加到ListView?

Android 如何将视图添加到ListView?,android,listview,android-listview,Android,Listview,Android Listview,我遇到的每个示例/教程都只是向ListView添加字符串,但我想添加膨胀视图。我已经测试了膨胀视图,如果我使用addView()将其添加到某个视图组(如RelativeLayout)中,它看起来很好。但将膨胀视图添加到ListView只会以文本形式显示: ArrayList<View> friend_request_items = new ArrayList<View>(); //a list containing the items we want to add

我遇到的每个示例/教程都只是向ListView添加字符串,但我想添加膨胀视图。我已经测试了膨胀视图,如果我使用addView()将其添加到某个视图组(如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();

ArrayList-friend\u-request\u-items=new-ArrayList()//包含我们要添加的项目的列表
ListView好友请求列表=(ListView)findViewById(R.id.friend请求列表);
ArrayAdapter friend_request_adapter=新的ArrayAdapter(这是android.R.layout.simple_list_item_1,friend_request_items);
设置适配器(朋友请求适配器);
//friend_模板只是我自己的xml文件,包含我正在膨胀的视图
查看friend\u request\u item=LayoutFlater.from(this).充气(R.layout.friend\u模板,空);
好友请求项。添加(好友请求项);
朋友请求适配器。notifyDataSetChanged();

我认为问题在于我要传递到适配器的布局,但我不知道要将其更改为什么(或者这是否是解决方案)。

这里是一个使用自定义ArrayAdapter和自定义xml布局的不错的教程。 您应该对ArrayAdapter进行子类化,并在getView方法中膨胀一行,这是一种常见而有效的解决方案,您应该传递一个数据类,例如
ArrayAdapter
或类似的内容,而不是将视图作为列表的通用参数传递

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;
}
公共类FriendRequestsAdapter扩展了ArrayAdapter{
私人充气机;
public FriendRequestsAdapter(上下文、列表请求){
super(上下文,R.layout.friend\u请求行,请求);
this.inflater=((活动)上下文).getLayoutFlater();
}
@凌驾
公共视图getView(int位置、视图转换视图、视图组父视图){
if(convertView==null){
convertView=充气机。充气(R.layout.friend\u request\u行,父级,false);
}
FriendRequest item=getItem(位置);
TextView TextView=(TextView)convertView.findViewById(R.id.TextView);
返回视图;
}

}这是一个很好的教程,使用了自定义ArrayAdapter和自定义xml布局。 您应该对ArrayAdapter进行子类化,并在getView方法中膨胀一行,这是一种常见而有效的解决方案,您应该传递一个数据类,例如
ArrayAdapter
或类似的内容,而不是将视图作为列表的通用参数传递

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;
}
公共类FriendRequestsAdapter扩展了ArrayAdapter{
私人充气机;
public FriendRequestsAdapter(上下文、列表请求){
super(上下文,R.layout.friend\u请求行,请求);
this.inflater=((活动)上下文).getLayoutFlater();
}
@凌驾
公共视图getView(int位置、视图转换视图、视图组父视图){
if(convertView==null){
convertView=充气机。充气(R.layout.friend\u request\u行,父级,false);
}
FriendRequest item=getItem(位置);
TextView TextView=(TextView)convertView.findViewById(R.id.TextView);
返回视图;
}

}这是一个很好的教程,使用了自定义ArrayAdapter和自定义xml布局。 您应该对ArrayAdapter进行子类化,并在getView方法中膨胀一行,这是一种常见而有效的解决方案,您应该传递一个数据类,例如
ArrayAdapter
或类似的内容,而不是将视图作为列表的通用参数传递

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;
}
公共类FriendRequestsAdapter扩展了ArrayAdapter{
私人充气机;
public FriendRequestsAdapter(上下文、列表请求){
super(上下文,R.layout.friend\u请求行,请求);
this.inflater=((活动)上下文).getLayoutFlater();
}
@凌驾
公共视图getView(int位置、视图转换视图、视图组父视图){
if(convertView==null){
convertView=充气机。充气(R.layout.friend\u request\u行,父级,false);
}
FriendRequest item=getItem(位置);
TextView TextView=(TextView)convertView.findViewById(R.id.TextView);
返回视图;
}

}这是一个很好的教程,使用了自定义ArrayAdapter和自定义xml布局。 您应该对ArrayAdapter进行子类化,并在getView方法中膨胀一行,这是一种常见而有效的解决方案,您应该传递一个数据类,例如
ArrayAdapter
或类似的内容,而不是将视图作为列表的通用参数传递

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;
}
公共类FriendRequestsAdapter扩展了ArrayAdapter{
私人充气机;
public FriendRequestsAdapter(上下文、列表请求){
super(上下文,R.layout.friend\u请求行,请求);
this.inflater=((活动)上下文).getLayoutFlater();
}
@凌驾
公共视图getView(int位置、视图转换视图、视图组父视图){
if(convertView==null){
convertView=充气机。充气(R.layout.friend\u request\u行,父级,false);
}
FriendRequest item=getItem(位置);
TextView TextView=(TextView)convertView.findViewById(R.id.TextView);
返回视图;
}
}

我遇到的每个示例/教程都只是在ListView中添加字符串

还有其他的例子,尽管你不太可能找到你提议的例子

我想添加膨胀视图

ListAdapter
从其
getView()
方法返回“膨胀视图”。这完全取决于你来决定它是如何做到这一点的

此外,
列表视图
背后的要点是能够循环使用列表行
视图
,因为列表可能很大,而行在堆空间方面比较昂贵。您的代码似乎在前面创建了所有行视图,这只适用于小数据集

但是将膨胀视图添加到ListView只会以文本的形式显示它

ListView
ArrayAdapter
上调用
getView()