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