Android ListView 長度自適應item的內容 計算listview的高度

Android 原生的ListView的長度是不會根據裏面內容項的多少而改變你以前定義的長度的(wrap_content或者是fill_parent)java

可是有些時候就想, 我裏面有一個Item, 它就顯示一個item.   可是若是裏面有2個Item, List的長度就增長一倍, 顯示兩個, OK這篇博文就是要說明一下如何實現, 之因此寫, 是爲了記錄一下, 不免本身之後就忘記了.android

OK, 首先,本身定義一個LIstView, 繼承字ListViewide

package com.abc.pet.common.view;
import android.content.Context;
import android.util.AttributeSet;
import android.widget.ListView;
/**
 * 計算listview的高度加載到scrollview中
 * 
 */
public class MyDetailsListView extends ListView
{
 public MyDetailsListView(Context context)
 {
  super(context);
 }
 public MyDetailsListView(Context context, AttributeSet attrs)
 {
  super(context, attrs);
 }
 public MyDetailsListView(Context context, AttributeSet attrs, int defStyle)
 {
  super(context, attrs, defStyle);
 }
 @Override
 protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec)
 {
  // TODO Auto-generated method stub
  int expandSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2,
    MeasureSpec.AT_MOST);
  super.onMeasure(widthMeasureSpec, expandSpec);
 }
}

OK, 這樣就能夠在XML中用這個自定義的LIstView了, 來替換掉系統的LIstViewthis

 <LinearLayout 
                android:orientation="vertical" 
                android:id="@+id/layout_added_pet_profile" 
                android:background="@drawable/layout_white_background" 
                android:layout_width="fill_parent" 
                android:layout_height="match_parent" 
                android:layout_marginTop="5.0dip">
               
                <com.abc.pet.common.view.MyDetailsListView
                 android:id="@+id/added_pet_list"
                 android:layout_width="fill_parent"
                 android:layout_height="wrap_content"
                 android:scrollbars="none"
                 android:layout_marginLeft="5dip"
                 android:layout_marginRight="5dip"
                 />
            </LinearLayout>

OK, 雖然咱們的ListView是wrap_content, 可是它已經能夠根據裏面內容的多少, 本身計算ListView的高度了,來適應scrollview.code

如何添加項目到ListView中呢, 就要用到adapter了, 接下來定義一個adapter.xml

public class AddedPetProfileItemAdapter extends BaseAdapter
{
 private Context mContext;
 private List<String> list;
 public AddedPetProfileItemAdapter()
 {
 }
 public AddedPetProfileItemAdapter(Context context, List<String> list)
 {
  this.mContext = context;
  this.list = list;
 }
 @Override
 public int getCount()
 {
  // TODO Auto-generated method stub
  return list.size();
 }
 @Override
 public Object getItem(int position)
 {
  // TODO Auto-generated method stub
  return position;
 }
 @Override
 public long getItemId(int position)
 {
  // TODO Auto-generated method stub
  return position;
 }
 @SuppressLint("NewApi")
 @Override
 public View getView(int position, View view, ViewGroup parent)
 {
  // TODO Auto-generated method stub
  final Holder hold;
  if (view == null)
  {
   hold = new Holder();
   view = View.inflate(mContext, R.layout.list_added_pet_profile_item,
     null);
   hold.added_pet_avatar = (ImageView) view
     .findViewById(R.id.added_pet_avatar);
     .
    .//等等一下東西
   .
   view.setTag(hold);
  }
  else
  {
   hold = (Holder) view.getTag();
  }
  //這裏去設置hold裏面的項目
  return view;
 }
 static class Holder
 {
  ImageView added_pet_avatar;// 添加了的寵物的照片
  EmojiconTextView added_pet_name;// 添加了的寵物的名字
  LinearLayout layoutadded_pet_gender_species;// 添加了的寵物的性別的背景
  ImageView added_pet_gender;// 性別圖片
  TextView added_pet_species;// 種類名字
  TextView added_pet_age;// 年齡
  RelativeLayout layout_added_pet_profile;
 }
}

而後activity中去調用這個adapter 就能夠了繼承

AddedPetProfileItemAdapter addedPetAdapter = new AddedPetProfileItemAdapter(mContext, petPiclist);
MyDetailsListView added_pet_listView = (MyDetailsListView)findViewById(R.id.added_pet_list);
  added_pet_listView.setAdapter(addedPetAdapter);

OK, 這裏就完了,圖片

文章寫的很急, 很爛, 但願看的童鞋們諒解, 主要也是用來記錄的, 之後看到直接就拿來用了,  見諒.....ip

相關文章
相關標籤/搜索