正如您所注意到的,layout_1只有一个textView,并且它是默认要使用的。
layout_2有两个文本视图-另一个用作子文本。
但这里有个诀窍-并不是所有的适配器都使用子文本;)
我发现编写一个特定目的的自定义适配器对任何事情都更容易(不会说是必须的)...
例如,这是一个自定义适配器,将使用simple_list_item_2显示名称及其状态
这不是复制/粘贴代码,但您可以通过进行一些调整来修复它...
public class BuddyArrayAdapter extends ArrayAdapter<Buddy>
{
private static final String tag = "BuddyArrayAdapter";
private Context context;
private TextView buddyName;
private TextView buddyStatus;
private List<Buddy> buddies = new ArrayList<Buddy>();
public BuddyArrayAdapter(Context context, int textViewResourceId, List<Buddy> objects)
{
super(context, textViewResourceId, objects);
this.context = context;
this.buddies = objects;
Collections.sort(buddies);
}
@Override
public int getCount()
{
return this.buddies.size();
}
@Override
public Buddy getItem(int index)
{
if (index <= getCount())
return this.buddies.get(index);
return this.buddies.get(getCount() - 1);
}
@Override
public View getView(int position, View convertView, ViewGroup parent)
{
View row = convertView;
if (row == null)
{
LayoutInflater inflater = (LayoutInflater) this.getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
row = inflater.inflate(R.layout.simple_list_item_2, parent, false);
}
Buddy buddy = getItem(position);
buddy.refresh();
buddyName = (TextView) row.findViewById(R.id.buddy_name);
buddyName.setText(buddy.toString());
buddyStatus = (TextView) row.findViewById(R.id.buddy_mood);
buddyStatus.setText(buddy.getMood());
return row;
}
我建议您扩展构造函数,添加一个包含子文本的额外ArrayList,然后使用它们来替换buddy.getMood()调用。
最后,实例化此适配器并将其设置为listView的适配器。完成,您会看到两个文本都显示出来了 ;)
为了进一步改进,可以创建一个包含两个textViews的XML文件,如下所示。
<?xml version="1.0" encoding="utf-8"?>
<com.skype.widget.CheckableLinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="horizontal" >
<CheckedTextView
android:id="@+id/buddy_name"
android:layout_width="fill_parent"
android:layout_height="?android:attr/listPreferredItemHeight"
android:checkMark="?android:attr/textCheckMark"
android:gravity="center_vertical"
android:paddingLeft="6dip"
android:paddingRight="6dip"
android:text="@string/buddy_name"
android:textAppearance="?android:attr/textAppearanceLarge" />
<TextView
android:id="@+id/buddy_mood"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/empty_string"
android:layout_marginLeft="-350dp"
android:layout_marginTop="16dp"
android:gravity="center_vertical|bottom"
android:textAppearance="?android:attr/textAppearanceSmall" />
而不是
row = inflater.inflate(R.layout.simple_list_item_2, parent, false)
做。
row = inflater.inflate(R.layout.buddy_list_item, parent, false)
现在你知道如何让适配器与自定义XML和列表视图一起使用了。