需要掌握的知识点:1.ListView控件的使用;
2.理解Adapter 的作用并掌握自定义FruitAdapter 的使用方式。
首先定义一个实体类用于存放对象,使其作为ListView适配器的适配类型。
具体方法如下:
publicclass Infor {
private Stringname;
privateintimageId;
public Infor (String name,int imageId) {
super();
this.name = name;
this.imageId = imageId;
}
public String getName() {
returnname;
}
publicvoid setName(String name) {
this.name = name;
}
publicint getImageId() {
returnimageId;
}
publicvoid setImageId(int imageId) {
this.imageId = imageId;
}
}
然后我们需要建立一个自定义布局Infor_item.xml(ListView的子项布局);
具体实现如下:
<?xmlversion="1.0"encoding="utf-8"?>
<LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<ImageView
android:id="@+id/ivInfor"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/1_pic"/>
<TextView
android:id="@+id/tvInfor"
android:layout_gravity="center"
android:layout_margin="10dp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="今天的天气真好"/> //此处可以引用String.xml中的字段。
</LinearLayout>
以上的布局是为ListView的一个子项,接下来我们就要创建一个自定义的适配器InforAdapter,这个适配器继承自ArrayAdapter,重写构造方法和getView方法
具体实现方法如下:
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.ImageView;
import android.widget.TextView;
import com.example.ui_listview01.R;
import com.example.ui_listview01.model.Fruit;
publicclass InforAdapterextendsArrayAdapter {
privateintresourceId;
public InforAdapter(Context context,int textViewResourceId) {
super(context, textViewResourceId);
resourceId = textViewResourceId;
}
//每个子项被滚动到屏幕内的时候会被调用
public ViewgetView(int position, View convertView, ViewGroup parent) {
Infor infor = (Infor) getItem(position);
View view = null;
ViewHolder viewHolder; //当convertView为空的时候,创建一个ViewHolder对象,并将控件的实例都存放在ViewHolder里,然后调用View的setTag()方法,将ViewHolder对象存储在View中。
if (convertView ==null) {
view = LayoutInflater.from(getContext()).inflate(resourceId,null);
viewHolder = new ViewHolder();
viewHolder.ivFruit = (ImageView) view.findViewById(R.id.ivFruit);
viewHolder.tvFruit = (TextView) view.findViewById(R.id.tvFruit);
view.setTag(viewHolder);
} else {
//当convertView不为空的时候则调用View的getTag()方法,把ViewHolder重新取出。
view = convertView; // getView()方法中的convertView参数将之前加载好的布局进行缓存,以便之后重用
viewHolder = (ViewHolder) convertView.getTag();
}
viewHolder.ivFruit.setImageResource(fruit.getImageId());
viewHolder.tvFruit.setText(fruit.getName());
return view;
}
//添加一个内部类ViewHolder,用于对控件的实例进行缓存。
class ViewHolder {
ImageView ivInfor;
TextView tvInfor;
}
}
通过上述设置,所有控件的实例都缓存在了ViewHolder里,就没有必要每次都通过findViewById()方法来获取控件实例了。
本次android课程实现微博列表页面结束了,谢谢浏览。