【Android开发日记】LinearLayoutListView 解决ScrollView嵌套ListView无法自适应高度问题
来源:互联网 发布:10.11.4制作mac安装u盘 编辑:程序博客网 时间:2024/05/22 10:51
需求:
ScrollView嵌套ListView的效果
问题:
ListView不能随viewitem的个数自动改变高度
网上有很多的办法来处理这个问题,但是LinearLayoutListView 也不失为一个好办法。
代码:
代码1:xml中调用LinearLayoutListView
<ScrollView android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="vertical" > <com.think.read.LinearLayoutForListViewandroid:orientation="vertical" android:layout_width="fill_parent"android:layout_height="fill_parent" android:id="@+id/iread_read_letter_comments"> </com.think.read.LinearLayoutForListView></ScrollView>
代码2:LinearLayoutForListView.java
package ......;import android.content.Context;import android.util.AttributeSet;import android.util.Log;import android.view.View;import android.widget.LinearLayout;public class LinearLayoutForListView extends LinearLayout {private AdapterForLinearLayout adapter;private OnClickListener onClickListener = null;/** * */public void bindLinearLayout() {int count = adapter.getCount();for (int i = 0; i < count; i++) {View v = adapter.getView(i, null, null);v.setOnClickListener(this.onClickListener);if (i == count - 1) {LinearLayout ly = (LinearLayout) v;ly.removeViewAt(2);}addView(v, i);}Log.v("countTAG", "" + count);}public LinearLayoutForListView(Context context) {super(context);}public LinearLayoutForListView(Context context, AttributeSet attrs) {super(context, attrs);}/** * * * @return adapter */public AdapterForLinearLayout getAdpater() {return adapter;}/** * * * @param adpater */public void setAdapter(AdapterForLinearLayout adpater) {this.adapter = adpater;bindLinearLayout();}/** * * * @return */public OnClickListener getOnclickListner() {return onClickListener;}/** * * * @param onClickListener */public void setOnclickLinstener(OnClickListener onClickListener) {this.onClickListener = onClickListener;}}
代码3:AdapterForLinearLayout
package .......;import java.util.List;import java.util.Map;import com.think.R;import android.content.Context;import android.util.Log;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.view.View.OnClickListener;import android.widget.BaseAdapter;import android.widget.ImageView;import android.widget.TextView;public class AdapterForLinearLayout extends BaseAdapter {private LayoutInflater mInflater;private List<? extends Map<String, ?>> data;private int resource;private String[] from;private int[] to; public AdapterForLinearLayout(Context context, List<? extends Map<String, ?>> data, int resouce, String[] from, int[] to) { this.data = data; this.resource = resouce; this.data = data; this.from = from; this.to = to; this.mInflater = (LayoutInflater) context .getSystemService(Context.LAYOUT_INFLATER_SERVICE); }public int getCount() {return data.size();}public Object getItem(int position) {return data.get(position);}public long getItemId(int position) {return position;}public View getView(int position, View convertView, ViewGroup arg2) {convertView = mInflater.inflate(resource, null);final Map<String, ?> item = data.get(position);int count = to.length;for (int i = 0; i < count; i++) {View v = convertView.findViewById(to[i]);bindView(v, item, from[i]);ImageView prisebtn = (ImageView)convertView.findViewById(R.id.iread_letterview_item_praisebtn);prisebtn.setOnClickListener(new OnClickListener(){@Override public void onClick(View v) { // TODO Auto-generated method stubLog.e("prasie", "你点了赞" + item.get("iread_letterview_item_usernickname"));}});}convertView.setTag(position);return convertView;}/** * * * @param view * @param item * @param from */private void bindView(View view, Map<String, ?> item, String from) {Object data = item.get(from);if (view instanceof TextView) {((TextView) view).setText(data == null ? "" : data.toString());}//if (view instanceof ImageView) {//((ImageView) view).setOnClickListener(new OnClickListener(){//@Override// public void onClick(View v) {// // TODO Auto-generated method stub//Log.e("prasie", "你点了赞" + item.get("iread_letterview_item_usernickname"));//}//});//}}}
代码4:LinearLayoutListView 子View :iread_read_listview_item.xml
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/iread_letterview_item_0" android:layout_width="match_parent" android:layout_height="wrap_content" android:gravity="center_vertical" android:background="#ffffff" android:orientation="vertical" > <RelativeLayout android:layout_width="fill_parent" android:layout_height="30dp" android:layout_marginLeft="15dp" android:layout_marginRight="15dp" android:orientation="horizontal" > <TextView android:id="@+id/iread_letterview_item_usernickname" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginLeft="0dp" android:layout_marginTop="7dp" android:text="咸鱼" android:layout_alignParentBottom= "true" android:textColor="#000000" android:textSize="14sp" /> <TextView android:id="@+id/iread_letterview_item_usermotto" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginLeft="10dp" android:layout_toRightOf="@+id/iread_letterview_item_usernickname" android:layout_alignParentBottom= "true" android:text="有梦想的咸鱼" android:textColor="#000000" android:textSize="10.0sp" /> <ImageView android:id="@+id/iread_letterview_item_praisebtn" android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/iread_read_letter_comment_praise" android:layout_toLeftOf="@+id/iread_letterview_item_praisenum" android:layout_marginRight="5dp" android:layout_alignParentBottom= "true" > </ImageView> <TextView android:id="@+id/iread_letterview_item_praisenum" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentBottom="true" android:layout_alignParentRight="true" android:layout_marginBottom="2dp" android:layout_marginRight="5dp" android:text="12" android:textColor="#000000" android:textSize="10.0sp" /> </RelativeLayout> <TextView android:id="@+id/iread_letterview_item_note" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginLeft="15dp" android:layout_marginRight="15dp" android:layout_marginTop="10dp" android:text="这里写评论这里写评论这里写评论这里写评论这里写评论这里写评论这里写评论这里写评论这里写评论这里写评论这里写评论这里写评论这里写评论这里写评论" android:textColor="#000000" android:textSize="12.0sp" /> <TextView android:id="@+id/iread_letterview_item_date" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="right" android:layout_marginBottom="2dp" android:layout_marginRight="15dp" android:layout_marginTop="10dp" android:text="2014.7.1" android:textColor="#000000" android:textSize="10.0sp" /> <RelativeLayout android:layout_width="wrap_content" android:layout_height="match_parent" android:orientation="horizontal" > <View android:layout_width="fill_parent" android:layout_height="1dp" android:layout_marginLeft="15dp" android:layout_marginRight="15dp" android:background="#A9A9A9" /> </RelativeLayout></LinearLayout>
代码5:dataList中的对象,即给子View布局的对象,包含不同数据类型的属性
package .....;public class CommentItemInfo {private String usernickname;private String userid;private String usermotto;private String date;private String note;//应该还有一个imagepublic String getusernickname() {return usernickname;}public void setusernickname(String usernickname_) {this.usernickname = usernickname_;}public String getuserid() {return userid;}public void setuserid(String userid_) {this.userid = userid_;}public String getusermotto() {return usermotto;}public void setusermotto(String usermotto_) {this.usermotto = usermotto_;}public String getdate() {return date;}public void setdate(String date_) {this.date = date_;}public String getnote() {return note;}public void setnote(String note_) {this.note = note_;}public CommentItemInfo() {// TODO Auto-generated constructor stub}public CommentItemInfo(String usernickname,String date,String note,String userid,String usermotto){// TODO Auto-generated constructor stubthis.usernickname = usernickname;this.userid = userid;this.usermotto = usermotto;this.date = date;this.note = note;}}
根据我的需求,每个子View中
代码6:Activity中实例化LinearLayoutListView
private LinearLayoutForListView lv;private AdapterForLinearLayout Layoutadpater;lv = (LinearLayoutForListView)findViewById(R.id.iread_read_letter_comments);datalist = new ArrayList<HashMap<String, Object>>();//datalist 数据设置Layoutadpater = new AdapterForLinearLayout(this, datalist, R.layout.iread_read_listview_item, new String[] { "iread_letterview_item_usernickname", "iread_letterview_item_usermotto" ,"iread_letterview_item_praisenum","iread_letterview_item_note","iread_letterview_item_date"}, new int[] {R.id.iread_letterview_item_usernickname, R.id.iread_letterview_item_usermotto,R.id.iread_letterview_item_praisenum,R.id.iread_letterview_item_note,R.id.iread_letterview_item_date});lv.setAdapter(Layoutadpater);
注意实例化适配器时的参数对应关系:
第一个参数:Context
第二个参数:List<? extends Map<String, ?>> data 对应 数据集,这里的dataList里面是自定义的对象,包含不同数据类型的属性
第三个参数:int resouce 对应 子View 的xml布局文件
第四个参数:String[] from 对应 子View的布局文件中的 控件的id名称集合
第五个参数:String[] from 对应 子View的布局文件中的 控件的id值集合
更改LinearLayoutListView中的数据:
1.增加: datalist.add()
2.清空:LinearLayoutListView.removeAllViews(),这里和ListView清空不太一样,ListView的Adapter适配的是List<View>,清空只用把装载view的List清空即可。而LinearLayoutListView是继承于LinearLayout而不是List,其添加子view是通过addview(),因此清空时只需用removeAllViews()即可。
附图:
1.LinearLayoutListView中 子View 在eclipse中的布局图示
2.效果图
- 【Android开发日记】LinearLayoutListView 解决ScrollView嵌套ListView无法自适应高度问题
- android ListView 嵌套scrollView 自适应高度
- ScrollView 嵌套listview解决listview高度问题
- Android开发--解决ScrollView中嵌套ListView问题
- ScrollView嵌套ListView高度问题
- ScrollView中嵌套ListView高度无法计算问题
- Android中ListVIew高度自适应,解决ScrollView冲突问题以及Android表格
- Android在ScrollView中嵌套ListView,ListView高度设置问题
- Android 6.0 ScrollView嵌套RecyclerView高度自适应问题
- Android ListView高度自适应和ScrollView冲突解决
- Android ListView自适应高度和ScrollView冲突解决 [有效]
- scrollView嵌套listview时,listview高度问题
- android scrollview嵌套listview计算高度的问题
- android scollview嵌套webview底部空白,高度无法自适应解决
- android ScollView 嵌套 WebView 底部空白,高度无法自适应解决
- 解决ScrollView嵌套ListView问题
- 解决ScrollView嵌套ListView问题
- 解决ScrollView嵌套ListView问题
- DOM和BOM的区别
- html5的优缺点
- JSP
- typedef struct 用法详解和用法小结(二)
- Design Pattern Visitor 访问者设计模式
- 【Android开发日记】LinearLayoutListView 解决ScrollView嵌套ListView无法自适应高度问题
- NL莉莎食品进口的全球外来直接从种植者 - 中国MP4数码音频播放器
- Flare-On Challenge5 Writeup
- 【cocos2dx-3.2】菜鸟之路——屏幕大小问题
- 阿里云ECS服务器部署django
- MP3到文字转录
- zoj 2672 DP+hash
- c语言思想11
- hdu2011 多项式求和