Android listview 嵌套 gridview (滑动控件的嵌套使用)

来源:互联网 发布:python 替换分隔符 编辑:程序博客网 时间:2024/06/18 14:55

在开发过程中 我没会遇到很多顺序的列表 如 水平排列我们可以用gridview 竖直排列列表 我们可以使用listview 当然也可以使用 recyclerview(下篇再说) 还有就是可滑动的页面配合列表 scrollview+listview 或 scrollview+gridview 关于两个滑动控件得嵌套 在此我浅薄得阐述一下 希望可以给大家一点帮助
首先我们需要解决第一个问题就是控件的高度问题 两个滑动控件嵌套我们需要重新设置高度 如果不设置 会不显示或者只显示一行
首先我没先写一个listview 给他重写高度

重写listview
public class MyListview extends ListView {
public MyListview(Context context) {
super(context);
}

public MyListview(Context context, AttributeSet attrs) {    super(context, attrs);}@Overrideprotected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {// 此处是关键    int expandSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2,            MeasureSpec.AT_MOST);    super.onMeasure(widthMeasureSpec, expandSpec);}

}

过程很简单 只需重写一个方法onMeasure 一行代码就可以搞定
int expandSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2,
MeasureSpec.AT_MOST);

同理 再来写gridview
重写gridview
public class MyGridView extends GridView {
public MyGridView(Context context) {
super(context);
}

public MyGridView(Context context, AttributeSet attrs) {    super(context, attrs);}@Overrideprotected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {    int expandSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2,            MeasureSpec.AT_MOST);    super.onMeasure(widthMeasureSpec, expandSpec);}

}

同样还是重复操作 走一遍
此时你就可以 使用了 我给个listview 嵌套gridview的例子
listview 在外 listview的xml
ListView
android:layout_width=”match_parent”
android:layout_height=”match_parent”
android:scrollbars=”none”
android:id=”@+id/all_listview”>ListView

list view的adater

public class FWDiscussAdapter extends BaseAdapter {
Context context;
List《HashMap《String,String》》 mlist;
public FWDiscussAdapter(Context context, List《HashMap《String,String》》 mlist) {
this.context=context;
this.mlist= mlist;
}

@Overridepublic int getCount() {    return mlist.size();}@Overridepublic Object getItem(int position) {    return mlist.get(position);}@Overridepublic long getItemId(int position) {    return position;}@Overridepublic View getView(int position, View convertView, ViewGroup parent) {    View view;    ViewHolder holder;    if (convertView==null){        view = View.inflate(context, R.layout.discuss_list_item,null);        holder = new ViewHolder();        holder.head = (ImageView) view.findViewById(R.id.dis_listhead);        holder.grade = (ImageView) view.findViewById(R.id.dis_list_grade);        holder.name = (TextView) view.findViewById(R.id.dis_listname);        holder.time = (TextView) view.findViewById(R.id.dis_listtime);        holder.listcontent = (TextView) view.findViewById(R.id.dis_listcontent);        holder.contentpic = (GridView) view.findViewById(R.id.dis_listcontentpic);        view.setTag(holder);    }else {        view= convertView;        holder= (ViewHolder) view.getTag();    }    holder.listcontent.setText(mlist.get(position).get("1"));

//初始化 gridview的适配器 并设置给gridview
FwDiscussGridAdapter gridAdapter = new FwDiscussGridAdapter(context,mlist.get(position));
holder.contentpic.setAdapter(gridAdapter);
return view;
}
class ViewHolder{
ImageView head,grade;
TextView name,time,listcontent;
GridView contentpic;
}
}

gridview 的 adapter
public class FwDiscussGridAdapter extends BaseAdapter {
Context context;
HashMap《String,String》 map;
public FwDiscussGridAdapter(Context context, HashMap《String,String》 map) {
this.context = context;
this.map = map;
}

@Overridepublic int getCount() {    return map.size();}@Overridepublic Object getItem(int position) {    return map.get(position);}@Overridepublic long getItemId(int position) {    return position;}@Overridepublic View getView(int position, View convertView, ViewGroup parent) {    View view;    ViewHolder holder;    if (convertView==null){        view = View.inflate(context, R.layout.discuss_grid_item,null);        holder = new ViewHolder();        holder.gridimg = (ImageView) view.findViewById(R.id.dis_grid_img);        view.setTag(holder);    }else {        view= convertView;        holder = (ViewHolder) view.getTag();    }    holder.gridimg.setImageResource(R.mipmap.anmo);    return view;}class ViewHolder{    ImageView gridimg;}

}

listview 绑定 adapter
ListView allList = (ListView) view.findViewById(R.id.all_listview);
List《HashMap《String,String》》 mlist = new ArrayList<>();
for (int i = 0; i < 20; i++) {
HashMap《String,String》 map = new HashMap<>();
map.put(“1”,”1111111111111111111111111111111111”);
map.put(“2”,”2”);
map.put(“3”,”3”);
map.put(“4”,”4”);
mlist.add(map);
}

    FWDiscussAdapter adapter = new FWDiscussAdapter(getActivity(),mlist);    allList.setAdapter(adapter);

}

到此处 就完成了 同样的 scrollview嵌套listview 也是同样的道理

阅读全文
0 0
原创粉丝点击