Android 原生的ListView的长度是不会根据里面内容项的多少而改变你之前定义的长度的(wrap_content或者是fill_parent)
但是有些时候就想, 我里面有一个Item, 它就显示一个item. 但是如果里面有2个Item, List的长度就增加一倍, 显示两个, OK这篇博文就是要说明一下如何实现, 之所以写, 是为了记录一下, 难免自己以后就忘记了.
OK, 首先,自己定义一个LIstView, 继承字ListView
packagecom.mon.view;
importandroid.content.Context;
importandroid.util.AttributeSet;
importandroid.widget.ListView;
/**
*计算listview的高度加载到scrollview中
*
*/
publicclassMyDetailsListViewextendsListView
{
publicMyDetailsListView(Contextcontext)
{
super(context);
}
publicMyDetailsListView(Contextcontext,AttributeSetattrs)
{
super(context,attrs);
}
publicMyDetailsListView(Contextcontext,AttributeSetattrs,intdefStyle)
{
super(context,attrs,defStyle);
}
@Override
protectedvoidonMeasure(intwidthMeasureSpec,intheightMeasureSpec)
{
//TODOAuto-generatedmethodstub
intexpandSpec=MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE>>2,
MeasureSpec.AT_MOST);
super.onMeasure(widthMeasureSpec,expandSpec);
}
}
OK, 这样就可以在XML中用这个自定义的LIstView了, 来替换掉系统的LIstView
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">
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"
/>
OK, 虽然我们的ListView是wrap_content, 但是它已经可以根据里面内容的多少, 自己计算ListView的高度了,来适应scrollview.
如何添加项目到ListView中呢, 就要用到adapter了, 接下来定义一个adapter.
publicclassAddedPetProfileItemAdapterextendsBaseAdapter
{
privateContextmContext;
privateListlist;
publicAddedPetProfileItemAdapter()
{
}
publicAddedPetProfileItemAdapter(Contextcontext,Listlist)
{
this.mContext=context;
this.list=list;
}
@Override
publicintgetCount()
{
//TODOAuto-generatedmethodstub
returnlist.size();
}
@Override
publicObjectgetItem(intposition)
{
//TODOAuto-generatedmethodstub
returnposition;
}
@Override
publiclonggetItemId(intposition)
{
//TODOAuto-generatedmethodstub
returnposition;
}
@SuppressLint("NewApi")
@Override
publicViewgetView(intposition,Viewview,ViewGroupparent)
{
//TODOAuto-generatedmethodstub
finalHolderhold;
if(view==null)
{
hold=newHolder();
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里面的项目
returnview;
}
staticclassHolder
{
ImageViewadded_pet_avatar;//添加了的宠物的照片
EmojiconTextViewadded_pet_name;//添加了的宠物的名字
LinearLayoutlayoutadded_pet_gender_species;//添加了的宠物的性别的背景
ImageViewadded_pet_gender;//性别图片
TextViewadded_pet_species;//种类名字
TextViewadded_pet_age;//年龄
RelativeLayoutlayout_added_pet_profile;
}
}
然后activity中去调用这个adapter 就可以了
AddedPetProfileItemAdapteraddedPetAdapter=newAddedPetProfileItemAdapter(mContext,petPiclist);
MyDetailsListViewadded_pet_listView=(MyDetailsListView)findViewById(R.id.added_pet_list);
added_pet_listView.setAdapter(addedPetAdapter);
OK, 这里就完了,
文章写的很急, 很烂, 希望看的童鞋们谅解, 主要也是用来记录的, 以后看到直接就拿来用了, 见谅.....