ListView嵌套GridView 带条目标题 使用ExpandableListView解决

先来布局xml

 

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/activity_main"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context="com.example.a.datepickerdialogdemo.MainActivity">


    <ExpandableListView
        android:layout_width="match_parent"
        android:scrollbars="none"
        android:id="@+id/expandablelistview"
        android:layout_height="match_parent"/>

</LinearLayout>

 

 

再来activity  很简单

public class MainActivity extends AppCompatActivity {


    private ExpandableListView expandableList;
    private ExpandCateAdapter adapter;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        expandableList = (ExpandableListView) findViewById(R.id.expandablelistview);
        adapter = new ExpandCateAdapter(this);
        expandableList.setAdapter(adapter);

    }
}

在来adapter 

 

public class ExpandCateAdapter extends BaseExpandableListAdapter {
    private Context context;

    private ArrayList<SeondProductTypeMapEntity> groupList;
    public ExpandCateAdapter(Context context,ArrayList<SeondProductTypeMapEntity>   groupList){
        this.context=context;
        this.groupList=groupList;
    }

    @Override
    public int getGroupCount() {
        return groupList.size();
    }

    @Override
    public int getChildrenCount(int groupPosition) {
        return 1;
    }

    @Override
    public Object getGroup(int groupPosition) {
        return groupList.get(groupPosition);
    }

    @Override
    public Object getChild(int groupPosition, int childPosition) {
        return groupList.get(groupPosition).thirdProductTypeMap.get(childPosition);
    }

    @Override
    public long getGroupId(int groupPosition) {
        return groupPosition;
    }

    @Override
    public long getChildId(int groupPosition, int childPosition) {
        return childPosition ;
    }

    @Override
    public boolean hasStableIds() {
        return true;
    }

    @Override
    public View getGroupView(int groupPosition, boolean isExpanded,View convertView, ViewGroup parent) {
        GroupViewHolder groupViewHolder;
        if (convertView == null) {
            groupViewHolder=new GroupViewHolder();
            convertView=View.inflate(context, R.layout.item_group, null);
            groupViewHolder.sort_tv_name=(TextView) convertView.findViewById(R.id.sort_tv_name);
            groupViewHolder.iv_color= (ImageView) convertView.findViewById(R.id.iv_color);
            convertView.setTag(groupViewHolder);
        }else {
            groupViewHolder=(GroupViewHolder) convertView.getTag();
        }
        SeondProductTypeMapEntity seondEntity=groupList.get(groupPosition);
        groupViewHolder.sort_tv_name.setText(seondEntity.sortName);
        if (groupPosition %3 == 0){
            groupViewHolder.iv_color.setBackgroundResource(R.drawable.red);
        }else if (groupPosition %3 == 1){
            groupViewHolder.iv_color.setBackgroundResource(R.drawable.blue);
        }else if (groupPosition %3 == 2){
            groupViewHolder.iv_color.setBackgroundResource(R.drawable.yellow);
        }

        return convertView;
    }

    @Override
    public View getChildView(final int groupPosition, final int childPosition,boolean isLastChild, View convertView, ViewGroup parent) {
        ChildViewHolder childViewHolder;
        if (convertView == null) {
            childViewHolder=new ChildViewHolder();
            convertView=View.inflate(context, R.layout.item_child, null);
            childViewHolder.sort_grid=(MyGridView) convertView.findViewById(R.id.sort_grid);
            convertView.setTag(childViewHolder);
        }else {
            childViewHolder=(ChildViewHolder) convertView.getTag();
        }
        ExpandChildAdapter childAdapter=new ExpandChildAdapter(context, groupList.get(groupPosition).thirdProductTypeMap);
        childViewHolder.sort_grid.setAdapter(childAdapter);
        childAdapter.notifyDataSetChanged();

        childViewHolder.sort_grid.setOnItemClickListener(new OnItemClickListener() {

            @Override
            public void onItemClick(AdapterView<?> parent, View view,int position, long id) {
                Intent intent = new Intent(context, WebViewShopListActivity.class);
                String url = Contants.GET_SORT_DETAILS_QIAN +groupList.get(groupPosition).thirdProductTypeMap.get(position).productTypeId + Contants.GET_SORT_DETAILS_HOU;
                intent.putExtra(Contants.INTENT_URL, url);
                Log.d("url==", url);
                context.startActivity(intent);
            }
        });

        return convertView;
    }

    @Override
    public boolean isChildSelectable(int groupPosition, int childPosition) {
        return true;
    }

    class GroupViewHolder{
        private TextView sort_tv_name;
        private ImageView iv_color;

    }

    class ChildViewHolder{
        private MyGridView sort_grid;
    }

}

里面子条目GridView的adapter

 

public class ExpandChildAdapter extends BaseAdapter {
   private Context context;
   private ArrayList<ThirdProductTypeMapEntity> list;
   private String base_image_url= PreferenceManager.getInstance().getSaveStringData(Contants.IMAGE_URL,"");
   private DisplayImageOptions options = new DisplayImageOptions.Builder()
   .cacheInMemory(true).cacheOnDisk(true).showImageOnLoading(R.drawable.iv_mrbj)
   .imageScaleType(ImageScaleType.IN_SAMPLE_INT).build();
   
   public ExpandChildAdapter(Context context,ArrayList<ThirdProductTypeMapEntity> list){
      this.context=context;
      this.list=list;
   }

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

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

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

   @Override
   public View getView(int position, View convertView, ViewGroup parent) {
      ViewHolder holder;
      if (convertView == null ) {
         holder=new ViewHolder();
         convertView=View.inflate(context, R.layout.item_sort_gridview, null);
         holder.iv_sorp=(ImageView) convertView.findViewById(R.id.iv_sorp);
         holder.tv_sorp_name=(TextView) convertView.findViewById(R.id.tv_sorp_name);
         convertView.setTag(holder);
         
      }else {
         holder=(ViewHolder) convertView.getTag();
         
      }
      ThirdProductTypeMapEntity thirdEntity=list.get(position);
      holder.tv_sorp_name.setText(thirdEntity.sortName);
      ImageLoader.getInstance().displayImage(base_image_url+thirdEntity.categoryImageApp, holder.iv_sorp,options);
      return convertView;
   }
   class ViewHolder{
      private ImageView iv_sorp;
      private TextView tv_sorp_name;
   }

}

发现运行起来GridView只能显示一行,少贴上一个自定义的GridView

 

package com.example.a123.myapplication;

import android.content.Context;
import android.util.AttributeSet;
import android.widget.GridView;

/**
 * Created by 123 on 2017/4/27.
 */

public class MyGridView extends GridView {
    public MyGridView(Context context) {
        super(context);
    }

    public MyGridView(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    public MyGridView(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
    }

    @Override
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
        int height = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2, MeasureSpec.AT_MOST);
        super.onMeasure(widthMeasureSpec, height);
    }

    @Override
    protected void onLayout(boolean changed, int l, int t, int r, int b) {
        super.onLayout(changed, l, t, r, b);
    }
}

这样就没问题了 

昨天写了个demo  GitHub地址

评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值