--自定义的适配器BaseAdapter中的getView方法是根据getcount方法获取到执行的次数,然后在例如Listview这样的容器中显示一条一条的数据。
1.这里先创建一个对象类--Hotroom
public class Hotroom {
String roomname1;
String roomname2;
String num1;
String num2;
public Hotroom() {
super();
// TODO Auto-generated constructor stub
}
public Hotroom(String roomname1, String roomname2, String num1,
String num2) {
super();
this.roomname1 = roomname1;
this.roomname2 = roomname2;
this.num1 = num1;
this.num2 = num2;
}
public String getRoomname1() {
return roomname1;
}
public void setRoomname1(String roomname1) {
this.roomname1 = roomname1;
}
public String getRoomname2() {
return roomname2;
}
public void setRoomname2(String roomname2) {
this.roomname2 = roomname2;
}
public String getNum1() {
return num1;
}
public void setNum1(String num1) {
this.num1 = num1;
}
public String getNum2() {
return num2;
}
public void setNum2(String num2) {
this.num2 = num2;
}
}
2.创建一个Listview 放在activity_main_hot.xml布局文件中
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<LinearLayout
android:layout_width="match_parent"
android:layout_height="320dp"
android:orientation="vertical" >
<ListView
android:id="@+id/avtivity_mian_hot_listview_hotroom"
android:layout_width="fill_parent"
android:layout_height="360dp" >
</ListView>
</LinearLayout>
</LinearLayout>
3.创建一个放在Listview中的布局文件activity_main_hot_listview.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="100dp"
android:orientation="horizontal" >
<ImageView android:id="@+id/avtivity_mian_hot_listview_imageview_gg1"
android:layout_width="80dp"
android:layout_height="100dp"/>
<LinearLayout
android:id="@+id/ll1"
android:layout_width="80dp"
android:layout_height="100dp"
android:orientation="vertical">
<TextView android:id="@+id/avtivity_mian_hot_listview_TextView_roomname1"
android:layout_width="80dp"
android:layout_height="50dp"
android:background="@color/silvery"/>
<TextView android:id="@+id/avtivity_mian_hot_listview_TextView_num1"
android:layout_width="80dp"
android:layout_height="50dp"
android:background="@color/silvery"/>
</LinearLayout>
<LinearLayout
android:id="@+id/ll2"
android:layout_width="80dp"
android:layout_height="100dp"
android:orientation="vertical">
<TextView android:id="@+id/avtivity_mian_hot_listview_TextView_roomname2"
android:layout_width="80dp"
android:layout_height="50dp"
android:background="@color/liangjinsilvery"/>
<TextView android:id="@+id/avtivity_mian_hot_listview_TextView_num2"
android:layout_width="80dp"
android:layout_height="50dp"
android:background="@color/liangjinsilvery"/>
</LinearLayout>
<ImageView android:id="@+id/avtivity_mian_hot_listview_imageview_gg2"
android:layout_width="80dp"
android:layout_height="100dp"/>
</LinearLayout>
4.在MainActivity.java中定义下面的变量,一个为集合的Hotroom对象,一个为Listview对象
ArrayList<Hotroom> hotroom;
ListView avtivity_mian_hot_listview_hotroom;
//向这个集合对象添加6个对象
hotroom=new ArrayList<Hotroom>();
for (int i = 0; i < 6; i++) {
hotroom.add(new Hotroom("房间号码:1231","房间号码:1234","人数:4532","人数:5635"));
}
//获取布局文件中的listview
avtivity_mian_hot_listview_hotroom=(ListView) findViewById(R.id.avtivity_mian_hot_listview_hotroom);
//NEW一个HotAdapter对象 ,然后用listview对象设置这个adapter
HotAdapter adapter = new HotAdapter(MainActivity.this,hotroom);
avtivity_mian_hot_listview_hotroom.setAdapter(adapter);
4.下面就是重点,先说未优化的BaseAdapter如何设置,定义一个HotAdapterj继承与BaseAdapter,
import java.util.ArrayList;
import com.example.android_0100_sale.R; import com.example.android_0100_sale_data.Hotroom;
import android.content.Context; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.BaseAdapter; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.TextView;
public class HotAdapter extends BaseAdapter{ Context context; ArrayList<Hotroom> hotroom; public HotAdapter(Context context, ArrayList<Hotroom> hotroom) { super(); this.context = context; this.hotroom = hotroom; }
@Override public int getCount() { // TODO Auto-generated method stub return hotroom.size(); }
@Override public Object getItem(int position) { // TODO Auto-generated method stub return null; }
@Override public long getItemId(int position) { // TODO Auto-generated method stub return 0; }
//未优化的方式 @Override public View getView(int position, View convertView, ViewGroup parent) { LinearLayout layout = (LinearLayout) LayoutInflater.from(context).inflate(R.layout.avtivity_mian_hot_listview, null); TextView txtroomname1 = (TextView) layout.findViewById(R.id.avtivity_mian_hot_listview_TextView_roomname1); TextView txtroomname2 = (TextView) layout.findViewById(R.id.avtivity_mian_hot_listview_TextView_roomname2); TextView txtnum1 = (TextView) layout.findViewById(R.id.avtivity_mian_hot_listview_TextView_num1); TextView txtnum2 = (TextView) layout.findViewById(R.id.avtivity_mian_hot_listview_TextView_num2); ImageView imggg1 = (ImageView) layout.findViewById(R.id.avtivity_mian_hot_listview_imageview_gg1); ImageView imggg2 = (ImageView) layout.findViewById(R.id.avtivity_mian_hot_listview_imageview_gg2); txtroomname1.setText(hotroom.get(position).getRoomname1()); txtroomname2.setText(hotroom.get(position).getRoomname2()); txtnum1.setText(hotroom.get(position).getNum1()); txtnum2.setText(hotroom.get(position).getNum2()); imggg1.setImageResource(R.drawable.ic_launcher); imggg2.setImageResource(R.drawable.ic_launcher); return layout; } }
-------下面是优化的方法,定义一个item类把布局中txtroomname1,txtroomname2,txtnum1,txtnum2在构造第一条数据的时候就缓存起来,在构造下面所有数据的时候都不会又跳到布局文件中去搜索,这样就提高了效率,适用与多条数据的适配。
//优化的方式 @Override public View getView(int position, View convertView, ViewGroup parent) { Item item; if(convertView==null){ item=new Item(); convertView=LayoutInflater.from(context).inflate(R.layout.avtivity_mian_hot_listview, null); item.txtroomname1=(TextView) convertView.findViewById(R.id.avtivity_mian_hot_listview_TextView_roomname1); item.txtroomname2=(TextView) convertView.findViewById(R.id.avtivity_mian_hot_listview_TextView_roomname2); item.txtnum1 = (TextView) convertView.findViewById(R.id.avtivity_mian_hot_listview_TextView_num1); item.txtnum2 = (TextView) convertView.findViewById(R.id.avtivity_mian_hot_listview_TextView_num2); item.imggg1 = (ImageView) convertView.findViewById(R.id.avtivity_mian_hot_listview_imageview_gg1); item.imggg2 = (ImageView) convertView.findViewById(R.id.avtivity_mian_hot_listview_imageview_gg2); convertView.setTag(item); }else{ item=(Item) convertView.getTag(); } item.txtroomname1.setText(hotroom.get(position).getRoomname1()); item.txtroomname2.setText(hotroom.get(position).getRoomname2()); item.txtnum1.setText(hotroom.get(position).getNum1()); item.txtnum2.setText(hotroom.get(position).getNum2()); item.imggg1.setImageResource(R.drawable.ic_launcher); item.imggg2.setImageResource(R.drawable.ic_launcher); return convertView; } private class Item{ TextView txtroomname1,txtroomname2,txtnum1,txtnum2; ImageView imggg1,imggg2; }