ListView的添加不同布局的item,缓存处理方法

最近项目需求在给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;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值