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

在开发过程中 我没会遇到很多顺序的列表 如 水平排列我们可以用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);
}

@Override
protected 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);
}

@Override
protected 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;
}

@Override
public int getCount() {
    return mlist.size();
}

@Override
public Object getItem(int position) {
    return mlist.get(position);
}

@Override
public long getItemId(int position) {
    return position;
}

@Override
public 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;
}

@Override
public int getCount() {
    return map.size();
}

@Override
public Object getItem(int position) {
    return map.get(position);
}

@Override
public long getItemId(int position) {
    return position;
}

@Override
public 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 也是同样的道理

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值