Android开发 二级筛选,常见的省市筛选问题

1. 主要是自定义一个类,让其继承于popupWindow;

2. 构造函数,构造函数中的参数根据自己的需要自定义,常见的包括Context,抽象方法(用于实现这个抽象方法的时候作具体的操作);

public CaiLiaoPopup(Context context, SelectCallBack callBack, View background){
   this.mContext = context;
   this.callBack=callBack;
   this.background=background;
   //设置可以获得焦点
   setFocusable(true);
   //设置弹窗内可点击
   setTouchable(true);    
   //设置弹窗外可点击
   setOutsideTouchable(true);
   
   //获得屏幕的宽度和高度
   mScreenWidth = Tools.getScreenWidth(mContext);
   mScreenHeight = Tools.getScreenHeight(mContext);
   
   setBackgroundDrawable(new BitmapDrawable());
   
   //设置弹窗的布局界面
   setContentView(LayoutInflater.from(mContext).inflate(R.layout.select_multiple_view, null));
   
   initUI();
}

3. 然后就是写适配器Adapter,由于是两级数据,因此需要两个Adapter,一个是父级,一个是子级,然后对父级的ListView设置监听,当点击某一项的时候弹出相对应的子级选项;

/**
 * 初始化弹窗列表
 */
private void initUI(){
   mListView = (ListView) getContentView().findViewById(R.id.pc_super_list);
   
   mSubListView= (ListView)getContentView().findViewById(R.id.pc_sub_list);

   //获取的服务器的数据
   final List<GoodsType> superDatas=MetalsTypeManager.getInstance().getDatas();
   
   final MetalsSuperAdapter superAdapter=new MetalsSuperAdapter(mContext,superDatas);
   
   mListView.setAdapter(superAdapter);
//这个是设置的第一项选项  父级是“全部”,对应的子级是“不限”
   superAdapter.setSelectedPosition(0);
   superAdapter.notifyDataSetInvalidated();
   
   List<GoodsTypeChild> subs=new ArrayList<GoodsTypeChild>();
   GoodsTypeChild temp=new GoodsTypeChild();
   temp.setName("不限");
   subs.add(temp);
   //适配器都是常用的继承于BaseAdapter的适配器
   MetalsSubAdapter subAdapter=new MetalsSubAdapter(mContext, subs);
   mSubListView.setAdapter(subAdapter);
   mSubListView.setOnItemClickListener(new OnItemClickListener() {
      @Override
      public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
         callBack.onSelctALL("全部商品");
         dismiss();
      }
   });
   
   mListView.setOnItemClickListener(new OnItemClickListener() {
      @Override
      public void onItemClick(AdapterView<?> arg0, View arg1, int position, long arg3) {
         
            superAdapter.setSelectedPosition(position);
            superAdapter.notifyDataSetInvalidated();
            
            if(position==0){
               List<GoodsTypeChild> subs=new ArrayList<GoodsTypeChild>();
               GoodsTypeChild temp=new GoodsTypeChild();
               temp.setName("不限");
               subs.add(temp);
               
               MetalsSubAdapter subAdapter=new MetalsSubAdapter(mContext, subs);
               mSubListView.setAdapter(subAdapter);
               mSubListView.setOnItemClickListener(new OnItemClickListener() {
                  @Override
                  public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                     callBack.onSelctALL("全部商品");
                     dismiss();
                  }
               });
            }else{
               current_l_id=superDatas.get(position).getId();
               final List<GoodsTypeChild> subs=superDatas.get(position).getChild();
               MetalsSubAdapter subAdapter=new MetalsSubAdapter(mContext, subs);
               mSubListView.setAdapter(subAdapter);
               mSubListView.setOnItemClickListener(new OnItemClickListener() {
                  @Override
                  public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                     GoodsTypeChild subModle=subs.get(position);
                     current_s_id=subModle.getId();
                     callBack.onSelect(subModle.getName(),current_l_id,current_s_id);
                     dismiss();
                  }
               });
            }
         }
   }); 
}
 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值