查看原文
其他

几行代码实现多级ListView的多级联动效果

2017-08-29 于亚豪 终端研发部



前言介绍

一个ListView的多级联动效果

项目地址:

https://github.com/QQ986945193/DialogLoadding

正文

一二三四级联动,ListView联动,城市选择联动,SQLite轻量级数据库,城市数据库!!!

效果如下:

  项目介绍  

  • 一二三四级联动,ListView联动,城市选择联动,SQLite轻量级数据库,城市数据库!!!

  • 基于项目本地的资源文件,SQLite轻量级数据库实现的城市选择器,数据库中城市数据基本齐全。

  • 本Demo是使用的ListView实现的联动,当然也可使用Fragment,在这里我只给出了一种方式。

  • 思路是融汇贯通的,我看网上大多都是三级联动,所以在这里给出一个很久之前写的四级联动,希望能够帮助到大家。

  • 注意:本Demo并不局限于数据库使用,如果您能够理解该思路&逻辑,使用json等其他方式都可实现更多级的联动。

  /**     * 设置省     */    private void setProvince() {        provinceValues=getProvince(countryValues.get(countryPosition).getPlaceid());        if(!(provinceValues.isEmpty())){            provinceAdapter=new LevelListViewAdapter(this, provinceValues);            provinceAdapter.setSelectedPositionNoNotify(provincePosition, provinceValues);            lv_province.setAdapter(provinceAdapter);            provinceAdapter.setOnItemClickListener(new LevelListViewAdapter.OnItemClickListener() {                @Override                
               public void onItemClick(View view, int position)
{                    
                  if(provinceNumber!=position){//记录不是当前点击的                        provinceNumber=position;//就记录当前条目                        provinceTime=System.currentTimeMillis();//并记录第一次时间戳                        Timer timer=new Timer();                        timer.schedule(new TimerTask() {                            @Override                            
                           public void run()
{                                provinceNumber=-1;                                provinceTime=0;                            }                        }, 300);                    }else{//记录的是当前点击的                        long num = System.currentTimeMillis()-provinceTime;//判断时间差,是不是双击                        if(num<=300){//时间差200毫秒内                            ToastUtil.showToast(MainActivity.this, provinceValues.get(position).getPlacename());                        }                        provinceNumber=-1;//重置过的记录                        provinceTime=0;//重置时间的记录                    }                    cityValues.clear();                    
                  if(!(provinceValues.isEmpty())){                        cityValues=getCity(provinceValues.get(position).getPlaceid());                        cityAdapter.notifyDataSetChanged();                        cityAdapter.setSelectedPositionNoNotify(0, cityValues);                        lv_city.smoothScrollToPosition(0);                    }else{                        cityAdapter.notifyDataSetChanged();                    }                }            });}    }

设置国和州,省的方式是一样的,这里不在贴出 布局很简单:

.......
<LinearLayout        android:layout_width="match_parent"        android:layout_height="0dp"        android:layout_weight="1"        android:orientation="horizontal" >        <ListView            android:id="@+id/lv_continent"            android:layout_width="match_parent"            android:layout_height="wrap_content"            android:layout_weight="1"            android:background="#ffffff"            android:cacheColorHint="#00000000"            android:divider="@null"            android:dividerHeight="0dp"            android:scrollbars="none" >        </ListView><LinearLayout            android:layout_width="match_parent"            android:layout_height="match_parent"            android:layout_weight="1"            android:orientation="vertical" >            <ListView                android:id="@+id/lv_country"                android:layout_width="match_parent"                android:layout_height="0dp"                android:layout_weight="1"                android:background="#ffffff"                android:cacheColorHint="#00000000"                android:divider="@null"                android:dividerHeight="0dp"                android:scrollbars="none" >            </ListView>            <View                android:layout_width="match_parent"                android:layout_height="0.5dp"                android:background="#c8c8c8" />        </LinearLayout>
......

参考双联动ListView--类似外卖点餐:

https://github.com/wjie2014/DoubleListViewLinkage

github项目:

https://github.com/QQ986945193/DialogLoadding

终端研发部提倡: 没有做不到的,只有想不到的

在这里获得的不仅仅是技术!


让心,在阳光下学会舞蹈

让灵魂,在痛苦中学会微笑

—终端研发部—



如果你觉得此文对您有所帮助,欢迎入群 QQ交流群 :232203809   

微信公众号:终端研发部


            

这里学到不仅仅是技术

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存