android 二级菜单、双ListView 仿美团、购物二级菜单

下载Demo

效果如下图,下载后直接粘贴就可以用

   

Bean.java

package com.mengle.app;import java.util.List;public class Bean {/** * result : Y address : * [{"name":"北京","custId":"010","area":["东城区","西城区","崇文区" * ,"宣武区","延庆县"]},{"name" * :"上海","custId":"021","area":["黄浦区","卢湾区","徐汇区","长宁区","静安区","其他"]}] */private String result;/** * name : 北京 custId : 010 area : ["东城区","西城区","崇文区","宣武区","延庆县"] */private List address;public void setResult(String result) {this.result = result;}public void setAddress(List address) {this.address = address;}public String getResult() {return result;}public List getAddress() {return address;}public static class AddressEntity {private String name;private String custId;private List area;public void setName(String name) {this.name = name;}public void setCustId(String custId) {this.custId = custId;}public void setArea(List area) {this.area = area;}public String getName() {return name;}public String getCustId() {return custId;}public List getArea() {return area;}}}
MainActivity.java

package com.mengle.app;import java.util.ArrayList;import java.util.List;import android.app.Activity;import android.graphics.drawable.BitmapDrawable;import android.os.Bundle;import android.util.DisplayMetrics;import android.view.LayoutInflater;import android.view.View;import android.view.View.OnClickListener;import android.view.ViewGroup.LayoutParams;import android.view.Window;import android.widget.AdapterView;import android.widget.AdapterView.OnItemClickListener;import android.widget.ListView;import android.widget.PopupWindow;import android.widget.TextView;import android.widget.Toast;import com.google.gson.Gson;import com.google.gson.reflect.TypeToken;import com.mengle.app.Bean.AddressEntity;public class MainActivity extends Activity {    private DisplayMetrics dm;    private PopupWindow popWindow;    private MoreAdapter moreAdapter;    private ListView morelist;    private TextView tv;    private List mainList;    private ListView mainlist;    private MainAdapter mainAdapter;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        requestWindowFeature(Window.FEATURE_NO_TITLE);        setContentView(R.layout.activity_main);        dm = new DisplayMetrics();        // 取得窗口属性        getWindowManager().getDefaultDisplay().getMetrics(dm);        initModle();// 添加数据        tv = (TextView) findViewById(R.id.tv);        tv.setOnClickListener(new OnClickListener() {            @Override            public void onClick(View v) {                downPopwindow();            }        });    }    private void downPopwindow() {        // showAsDropDown(View anchor);相对某个控件的位置(正左下方),无偏移        // showAsDropDown(View anchor, int x, int        // y);相对某个控件的位置,有偏移;x表示相对x轴的偏移,正表示向左,负表示向右;y表示相对y轴的偏移,正是向下,负是向上;        View contentView = LayoutInflater.from(this).inflate(R.layout.pop_down,                null);        int screenHeight = dm.heightPixels * 2 / 3;        // 这里就给具体大小的数字,要不然位置不好计算        popWindow = new PopupWindow(contentView, LayoutParams.MATCH_PARENT,                screenHeight);        // popWindow.setAnimationStyle(R.style.anim);// 淡入淡出动画        // popWindow.setTouchable(false);// 是否响应touch事件        popWindow.setFocusable(true);// 是否具有获取焦点的能力        // 点击PopupWindow以外的区域,PopupWindow是否会消失。        popWindow.setBackgroundDrawable(new BitmapDrawable());        popWindow.setOutsideTouchable(true);        mainlist = (ListView) contentView.findViewById(R.id.classify_mainlist);        morelist = (ListView) contentView.findViewById(R.id.classify_morelist);        mainAdapter = new MainAdapter(this, mainList);        mainAdapter.setSelectItem(0);        mainlist.setAdapter(mainAdapter);        mainlist.setOnItemClickListener(new OnItemClickListener() {            @Override            public void onItemClick(AdapterView<?> parent, View view,                    int position, long id) {                List lists = mainList.get(position).getArea();                initAdapter(lists);                mainAdapter.setSelectItem(position);                mainAdapter.notifyDataSetChanged();            }        });        mainlist.setChoiceMode(ListView.CHOICE_MODE_SINGLE);        // 一定要设置这个属性,否则ListView不会刷新        initAdapter(mainList.get(0).getArea());        morelist.setOnItemClickListener(new OnItemClickListener() {            @Override            public void onItemClick(AdapterView<?> parent, View view,                    int position, long id) {                String s = (String) moreAdapter.getItem(position);                Toast.makeText(getApplicationContext(), s, 1).show();                moreAdapter.setSelectItem(position);                moreAdapter.notifyDataSetChanged();            }        });        popWindow.showAsDropDown(tv);    }    private void initAdapter(List lists) {        moreAdapter = new MoreAdapter(this, lists);        morelist.setAdapter(moreAdapter);        moreAdapter.notifyDataSetChanged();    }    private void initModle() {        mainList = new ArrayList();        Gson gson = new Gson();        String json = "{\"result\":\"Y\", \"address\":[{\"name\":\"北京\",\"custId\":\""                + R.drawable.ic_category_1                + "\", \"area\":[\"东城区\",\"西城区\",\"崇文区\",\"宣武区\",\"延庆县\"]},{\"name\":\"上海\", \"custId\":\""                + R.drawable.ic_category_2                + "\",\"area\":[\"黄浦区\",\"卢湾区\",\"徐汇区\",\"长宁区\",\"静安区\",\"其他\"]}]}";        java.lang.reflect.Type type = new TypeToken() {        }.getType();        Bean b = gson.fromJson(json, type);        mainList.addAll(b.getAddress());    }}
activity_main.xml

<?xml version="1.0" encoding="utf-8"?>    
pop_down.xml
<?xml version="1.0" encoding="utf-8"?>        
MainAdapter.java

package com.mengle.app;import java.util.List;import com.mengle.app.Bean.AddressEntity;import android.content.Context;import android.view.View;import android.view.ViewGroup;import android.widget.BaseAdapter;import android.widget.ImageView;import android.widget.LinearLayout;import android.widget.TextView;public class MainAdapter extends BaseAdapter {private Context context;private List list;private int position = 0;private Holder hold;public MainAdapter(Context context, List list) {this.context = context;this.list = list;}public int getCount() {return list.size();}public Object getItem(int position) {return list.get(position);}public long getItemId(int position) {return position;}public View getView(int arg0, View view, ViewGroup viewGroup) {if (view == null) {view = View.inflate(context, R.layout.item_mainlist, null);hold = new Holder(view);view.setTag(hold);} else {hold = (Holder) view.getTag();}hold.img.setImageResource(Integer.parseInt(list.get(arg0).getCustId()));hold.txt.setText(list.get(arg0).getName());hold.layout.setBackgroundColor(0xFFEBEBEB);if (arg0 == position) {hold.layout.setBackgroundColor(0xFFFFFFFF);}return view;}public void setSelectItem(int position) {this.position = position;}public int getSelectItem() {return position;}private static class Holder {LinearLayout layout;ImageView img;TextView txt;public Holder(View view) {txt = (TextView) view.findViewById(R.id.mainitem_txt);img = (ImageView) view.findViewById(R.id.mainitem_img);layout = (LinearLayout) view.findViewById(R.id.mainitem_layout);}}}

item_mainlist.xml

<?xml version="1.0" encoding="utf-8"?>                        

MoreAdapter.java

package com.mengle.app;import java.util.List;import android.content.Context;import android.view.View;import android.view.ViewGroup;import android.widget.BaseAdapter;import android.widget.TextView;public class MoreAdapter extends BaseAdapter {private Context context;private int position = 0;Holder hold;private List lists;public MoreAdapter(Context context, List lists) {this.context = context;this.lists = lists;}public int getCount() {return lists.size();}public Object getItem(int position) {return lists.get(position);}public long getItemId(int position) {return position;}public View getView(int arg0, View view, ViewGroup viewGroup) {if (view == null) {view = View.inflate(context, R.layout.item_morelist, null);hold = new Holder(view);view.setTag(hold);} else {hold = (Holder) view.getTag();}hold.txt.setText(lists.get(arg0).toString());hold.txt.setTextColor(0xFF666666);if (arg0 == position) {hold.txt.setTextColor(0xFFFF8C00);}return view;}public void setSelectItem(int position) {this.position = position;}private static class Holder {TextView txt;public Holder(View view) {txt = (TextView) view.findViewById(R.id.moreitem_txt);}}}
item_morelist.xml

<?xml version="1.0" encoding="utf-8"?>    

更多相关文章

  1. android 二级菜单、双ListView 仿美团、购物App二级菜单

随机推荐

  1. Android核心库
  2. Android(安卓)Studio安装后打不开
  3. Android(安卓)应用安装设置
  4. Android经典蓝牙和Ble蓝牙的对比
  5. android 10.0拍照显示并上传服务器
  6. 弹球效果动画
  7. android:屏幕自适应
  8. Android(安卓)Password Field Example
  9. android环境搭建
  10. 聊聊Android切图