Android 原生的ListView的长度是不会根据里面内容项的多少而改变你之前定义的长度的(wrap_content或者是fill_parent)
但是有些时候就想, 我里面有一个Item, 它就显示一个item. 但是如果里面有2个Item, List的长度就增加一倍, 显示两个, OK这篇博文就是要说明一下如何实现, 之所以写, 是为了记录一下, 难免自己以后就忘记了.
OK, 首先,自己定义一个LIstView, 继承字ListView
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了, 来替换掉系统的LIstView
<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.
如何添加项目到ListView中呢, 就要用到adapter了, 接下来定义一个adapter.
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, 这里就完了,
文章写的很急, 很烂, 希望看的童鞋们谅解, 主要也是用来记录的, 以后看到直接就拿来用了, 见谅.....