Android ApiDemos示范解析(171):Views->Lists->4. ListAdapter

Android ApiDemos示例解析(171):Views->Lists->4. ListAdapter

本例通过自定义BaseAdapter(实现接口ListAdapter),创建了一个自定义的ListAdapter ,类似的例子可以参见Android ApiDemos示例解析(119):Views->Gallery->1. Photos。

使用自定义的ListAdapter ,可以自定义列表项的显示UI,通过重载ListAdpater 的getView 方法,ListAdapter缺省返回的View为一TextView (文本框),Android ApiDemos示例解析(119):Views->Gallery->1. Photos 中自定义返回ImageView.

本例返回一自定义View -SpeechView. 这个View由两个TextView构成,一个TextView显示Title,一个View显示内容:其构造函数定义如下:

public SpeechView(Context context, String title, String words) {
 super(context);

 this.setOrientation(VERTICAL);

 // Here we build the child views in code. They could also have
 // been specified in an XML file.

 mTitle = new TextView(context);
 mTitle.setText(title);
 addView(mTitle, new LinearLayout.LayoutParams(
 LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT));

 mDialogue = new TextView(context);
 mDialogue.setText(words);
 addView(mDialogue, new LinearLayout.LayoutParams(
 LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT));
}

自定义的SpeechListAdapter 的getView定义如下:

public View getView(int position, View convertView,
 ViewGroup parent) {
 SpeechView sv;
 if (convertView == null) {
 sv = new SpeechView(mContext, mTitles[position],
 mDialogue[position]);
 } else {
 sv = (SpeechView) convertView;
 sv.setTitle(mTitles[position]);
 sv.setDialogue(mDialogue[position]);
 }

 return sv;
}

因此列表的每项都显示为一个SpeechView:

Android ApiDemos示范解析(171):Views->Lists->4. ListAdapter