最近项目需求在给ListView添加不同布局的item,所以这样的情况缓存就有些不同了!
界面效果如下图:
这个ListView有4中item,当然前三个的item可以考虑有不同背景处理,但我在这里就是用的不同的layout处理的,这4个不同的布局如下:
第一个:rankinglist_item01.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="70dp"
android:layout_marginLeft="5dp"
android:orientation="horizontal" >
<TextView
android:id="@+id/rankinglist_no"
android:layout_width="30dp"
android:layout_height="35dp"
android:layout_gravity="top"
android:layout_marginLeft="16dp"
android:layout_marginRight="16dp"
android:gravity="center"
android:text="1"
android:textSize="16dp"
android:textColor="#FFFFFF"
android:background="@drawable/rankinglist_no1_bg"
android:scaleType="fitXY" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginTop="8dp"
android:gravity="center_vertical"
android:orientation="horizontal" >
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_weight="1"
android:gravity="center_vertical"
android:orientation="vertical" >
<TextView
android:id="@+id/rankinglist_bookname"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="正宗加多宝"
android:textColor="#4B5558"
android:textSize="18dp" />
<TextView
android:id="@+id/rankinglist_bookauthor"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textColor="#A5AAAB"
android:text="后刚出品"
android:textSize="13dp" />
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center_vertical"
android:layout_weight="5"
android:orientation="horizontal" >
<ImageView
android:id="@+id/dashen_more_list_right"
android:layout_width="10dp"
android:layout_height="15dp"
android:layout_gravity="center_vertical"
android:layout_marginRight="18dp"
android:src="@drawable/right"
android:scaleType="fitXY" />
</LinearLayout>
</LinearLayout>
</LinearLayout>
第二个:rankinglist_item02.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="70dp"
android:layout_marginLeft="5dp"
android:orientation="horizontal" >
<TextView
android:id="@+id/rankinglist_no"
android:layout_width="30dp"
android:layout_height="35dp"
android:layout_gravity="top"
android:layout_marginLeft="16dp"
android:layout_marginRight="16dp"
android:gravity="center"
android:text="1"
android:textSize="16dp"
android:textColor="#FFFFFF"
android:background="@drawable/rankinglist_no2_bg"
android:scaleType="fitXY" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginTop="8dp"
android:gravity="center_vertical"
android:orientation="horizontal" >
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_weight="1"
android:gravity="center_vertical"
android:orientation="vertical" >
<TextView
android:id="@+id/rankinglist_bookname"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="正宗加多宝"
android:textColor="#4B5558"
android:textSize="18dp" />
<TextView
android:id="@+id/rankinglist_bookauthor"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textColor="#A5AAAB"
android:text="后刚出品"
android:textSize="13dp" />
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center_vertical"
android:layout_weight="5"
android:orientation="horizontal" >
<ImageView
android:id="@+id/dashen_more_list_right"
android:layout_width="10dp"
android:layout_height="15dp"
android:layout_gravity="center_vertical"
android:layout_marginRight="18dp"
android:src="@drawable/right"
android:scaleType="fitXY" />
</LinearLayout>
</LinearLayout>
</LinearLayout>
第三个:rankinglist_item03.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="70dp"
android:layout_marginLeft="5dp"
android:orientation="horizontal" >
<TextView
android:id="@+id/rankinglist_no"
android:layout_width="30dp"
android:layout_height="35dp"
android:layout_gravity="top"
android:layout_marginLeft="16dp"
android:layout_marginRight="16dp"
android:gravity="center"
android:text="1"
android:textSize="16dp"
android:textColor="#FFFFFF"
android:background="@drawable/rankinglist_no3_bg"
android:scaleType="fitXY" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginTop="8dp"
android:gravity="center_vertical"
android:orientation="horizontal" >
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_weight="1"
android:gravity="center_vertical"
android:orientation="vertical" >
<TextView
android:id="@+id/rankinglist_bookname"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="正宗加多宝"
android:textColor="#4B5558"
android:textSize="18dp" />
<TextView
android:id="@+id/rankinglist_bookauthor"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textColor="#A5AAAB"
android:text="后刚出品"
android:textSize="13dp" />
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center_vertical"
android:layout_weight="5"
android:orientation="horizontal" >
<ImageView
android:id="@+id/dashen_more_list_right"
android:layout_width="10dp"
android:layout_height="15dp"
android:layout_gravity="center_vertical"
android:layout_marginRight="18dp"
android:src="@drawable/right"
android:scaleType="fitXY" />
</LinearLayout>
</LinearLayout>
</LinearLayout>
第四个:rankinglist_item04.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="70dp"
android:layout_marginLeft="5dp"
android:orientation="horizontal" >
<TextView
android:id="@+id/rankinglist_no"
android:layout_width="25dp"
android:layout_height="25dp"
android:layout_gravity="center_vertical"
android:layout_marginLeft="16dp"
android:layout_marginRight="16dp"
android:background="@drawable/rankinglist_no4_bg"
android:gravity="center"
android:scaleType="fitXY"
android:text="4"
android:textColor="#FFFFFF"
android:textSize="16dp" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginTop="8dp"
android:gravity="center_vertical"
android:orientation="horizontal" >
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_weight="1"
android:gravity="center_vertical"
android:orientation="vertical" >
<TextView
android:id="@+id/rankinglist_bookname"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="正宗加多宝"
android:textColor="#4B5558"
android:textSize="18dp" />
<TextView
android:id="@+id/rankinglist_bookauthor"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="后刚出品"
android:textColor="#A5AAAB"
android:textSize="13dp" />
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_weight="5"
android:gravity="center_vertical"
android:orientation="horizontal" >
<ImageView
android:id="@+id/dashen_more_list_right"
android:layout_width="10dp"
android:layout_height="15dp"
android:layout_gravity="center_vertical"
android:layout_marginRight="20dp"
android:scaleType="fitXY"
android:src="@drawable/right" />
</LinearLayout>
</LinearLayout>
</LinearLayout>
主layout:rankinglist_layout.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" >
<include
android:id="@+id/topbar"
layout="@layout/topbar" />
<LinearLayout
android:id="@+id/popup"
android:layout_width="match_parent"
android:layout_height="45dp"
android:layout_marginTop="-6dp"
android:background="@drawable/top_tittle_bg1"
android:gravity="center"
android:orientation="horizontal" >
<TextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="总榜"
android:textColor="#993737"
android:textSize="18sp" />
<ImageButton
android:id="@+id/imageView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="10dp"
android:contentDescription="@string/dis"
android:src="@drawable/rankinglist_title_icon"
/>
</LinearLayout>
<ListView
android:id="@+id/rankinglist_listview"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:cacheColorHint="#00000000"
android:listSelector="#00000000"
>
</ListView>
</LinearLayout>
Activity 中的逻辑代码
public class RankingListActivity extends Activity {
private ListView lv;
private DisplayMetrics dm;
private LayoutInflater inflater;
@Override
public void onCreate(Bundle paramBundle) {
// TODO Auto-generated method stub
super.onCreate(paramBundle);
setContentView(R.layout.rankinglist_layout);
dm = new DisplayMetrics();
inflater = LayoutInflater.from(this);
dm = this.getResources().getDisplayMetrics();
lv = (ListView) view.findViewById(R.id.rankinglist_listview);
lv.setAdapter(new RankingListAdapter(creatData()));
}
//缓存问题关键在Adapter,提别注意红色部分,一般很少用到
private class RankingListAdapter extends BaseAdapter {
ArrayList<Book> List;
final int TYPE_1 = 0;
final int TYPE_2 = 1;
final int TYPE_3 = 2;
final int TYPE_4 = 3;
public RankingListAdapter(ArrayList<Book> specialList) {
// TODO Auto-generated constructor stub
this.List = specialList;
}
public int getCount() {
return List.size();
}
public Object getItem(int position) {
return List.get(position);
}
public long getItemId(int position) {
return position;
}
@Override
public int getItemViewType(int position) {//这里根据position返回不同类型type
// TODO Auto-generated method stub
if (position == 0)
return TYPE_1;
else if (position == 1)
return TYPE_2;
else if (position == 2)
return TYPE_3;
else
return TYPE_4;
}
@Override
public int getViewTypeCount() {//返回ListView一共有多少种item
// TODO Auto-generated method stub
return 4;
}
public View getView(final int position, View convertView,
ViewGroup parent) {
ViewHolder01 holder01 = null;
ViewHolder02 holder02 = null;
ViewHolder03 holder03 = null;
ViewHolder04 holder04 = null;
int type = getItemViewType(position);
if (convertView == null) {
switch (type) {
case TYPE_1:
convertView = inflater.inflate(R.layout.rankinglist_item01,
parent, false);
holder01 = new ViewHolder01();
creatView(convertView, holder01);
break;
case TYPE_2:
convertView = inflater.inflate(R.layout.rankinglist_item02,
parent, false);
holder02 = new ViewHolder02();
creatView(convertView, holder02);
break;
case TYPE_3:
convertView = inflater.inflate(R.layout.rankinglist_item03,
parent, false);
holder03 = new ViewHolder03();
creatView(convertView, holder03);
break;
default:
convertView = inflater.inflate(R.layout.rankinglist_item04,
parent, false);
holder04 = new ViewHolder04();
creatView(convertView, holder04);
break;
}
} else {
switch (type) {
case TYPE_1:
holder01 = (ViewHolder01) convertView.getTag();
break;
case TYPE_2:
holder02 = (ViewHolder02) convertView.getTag();
break;
case TYPE_3:
holder03 = (ViewHolder03) convertView.getTag();
break;
default:
holder04 = (ViewHolder04) convertView.getTag();
break;
}
}
switch (type) {
case TYPE_1:
fillData(holder01, List.get(position), position);
break;
case TYPE_2:
fillData(holder02, List.get(position), position);
break;
case TYPE_3:
fillData(holder03, List.get(position), position);
break;
default:
fillData(holder04, List.get(position), position);
break;
}
return convertView;
}
}
public void fillData(BaseViewHolder bvh, Book book, int position) {
bvh.bookName.setText(book.getBookName());
bvh.bookNo.setText(position + 1 + "");
bvh.bookAutor.setText(book.getBookAuthor());
}
public void creatView(View view, BaseViewHolder bvh) {
bvh.bookNo = (TextView) view.findViewById(R.id.rankinglist_no);
bvh.bookName = (TextView) view.findViewById(R.id.rankinglist_bookname);
bvh.bookAutor = (TextView) view
.findViewById(R.id.rankinglist_bookauthor);
view.setTag(bvh);
}
class ViewHolder01 extends BaseViewHolder {
}
class ViewHolder02 extends BaseViewHolder {
}
class ViewHolder03 extends BaseViewHolder {
}
class ViewHolder04 extends BaseViewHolder {
}
class BaseViewHolder {
TextView bookName, bookAutor, bookNo;
}
public ArrayList<Book> creatData() {
ArrayList<Book> list = new ArrayList<Book>();
for (int i = 0; i < 2000; i++) {
Book book = new Book();
book.setBookName("笑傲江湖");
book.setBookAuthor("金庸");
book.setBookId(1);
list.add(book);
}
return list;
}