ListView的二级菜单——doublelist

先来看效果图
这里写图片描述

这里主要实现了一个二级菜单,并且将所点击的item的id以及名称传递出去。

下面来看代码

首先是布局,第一个就不用讲了,都是button,关键是下面这个doublelist。

    <?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="horizontal" android:layout_width="match_parent"
    android:layout_height="match_parent">

    <ListView
        android:id="@+id/classify_mainlist"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_weight="20"
        android:background="#fff"
        android:cacheColorHint="#00000000"
        android:divider="#fff"
        android:dividerHeight="1px"
        android:fastScrollEnabled="true"
        android:listSelector="#00000000"
        android:scrollbars="none" />

    <ListView
        android:id="@+id/classify_morelist"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_weight="17"
        android:background="#fff"
        android:cacheColorHint="#00000000"
        android:divider="#ffebebeb"
        android:dividerHeight="0.5px"
        android:fastScrollEnabled="true"
        android:listSelector="#00000000"/>

</LinearLayout>

这里就是两个listview拼接起来,然后设置adapter时,mainlist点击变色,变成morelist的主色,这样在视觉效果上就感觉像是mainlist打开了morelist一样。

然后就是两个listview的adapter:
ClassifyMainAdapter:

    public class ClassifyMainAdapter extends BaseAdapter {
   

    private Context context;
    private String[] list;
    private int position;
    Holder hold;

    public ClassifyMainAdapter(Context context, String[] list,int position) {
        this.context = context;
        this.list = list;
        this.position = position;
    }


    public int getCount() {
        return list.length;
    }

    public Object getItem(int position) {
        return list[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_classify_mainlist, null);
            hold = new Holder(view);
            view.setTag(hold);
        } else {
            hold = (Holder) view.getTag();
        }
        hold.txt.setText(list[arg0].toString());
        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;
        TextView txt;

        public Holder(View view) {
            txt = (TextView) view.findViewById(R.id.tv_main);
            layout = (LinearLayout) view.findViewById(R.id.mainitem_layout);
        }
    }
}

ClassifyMoreAdapter:

    public class ClassifyMoreAdapter extends BaseAdapter {
   

    private Context context;
    private String[] text_list;
    private int position = 0;
    Holder hold;

    public ClassifyMoreAdapter(Context context, String[] text_list) {
        this.context = context;
        this.text_list = text_list;
    }

    public int getCount() {
        return text_list.length;
    }

    public Object getItem(int position) {
        return text_list[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_classify_morelist, null);
            hold = new Holder(view);
            view.setTag(hold);
        } else {
            hold = (Holder) view.getTag();
        }
        hold.txt.setText(text_list[arg0]);
        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);
        }
    }
}

两个adapter是实现了点击变色。接下来是doublelist的主代码:
MainActiivy:

    public class MainActivity extends ActionBarActivity implements View.OnClickListener{

    private Button btn_0,btn_1,btn_2,btn_3,btn_4,btn_5,btn_6,btn_7,btn_8,btn_9,btn_10,btn_11,btn_12,btn_13,
           btn_14,btn_15;

    private Bundle bundle = new Bundle();


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        btn_0 = (Button) findViewById(R.id.btn_0);
        btn_1 = (Button) findViewById(R.id.btn_1);
        btn_2 = (Button) findViewById(R.id.btn_2);
        btn_3 = (Button) findViewById(R.id.btn_3);
        btn_4 = (Button) findViewById(R.id.btn_4);
        btn_5 = (Button) findViewById(R.id.btn_5);
        btn_6 = (Button) findViewById(R.id.btn_6);
        btn_7 = (Button) findViewById(R.id.btn_7);
        btn_8 = (Button) findViewById(R.id.btn_8);
        btn_9 = (Button) findViewById(R.id.btn_9);
        btn_10 = (Button) findViewById(R.id.btn_10);
        btn_11 = (Button) findViewById(R.id.btn_11);
        btn_12 = (Button) findViewById(R.id.btn_12);
        btn_13 = (Button) findViewById(R.id.btn_13);
        btn_14 = (Button) findViewById(R.id.btn_14);
        btn_15 = (Button) findViewById(R.id.btn_15);

        btn_0.setOnClickListener(this);
        btn_1.setOnClickListener(this);
        btn_2.setOnClickListener(this);
        btn_3.setOnClickListener(this);
        btn_4.setOnClickListener(this);
        btn_5.setOnClickListener(this);
        btn_6.setOnClickListener(this);
        btn_7.setOnClickListener(this);
        btn_8.setOnClickListener(this);
        btn_9.setOnClickListener(this)
  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
AndroidListView二级菜单可以通过嵌套ListView实现。具体步骤如下: 1. 创建一个主ListView并设置Adapter,Adapter中的数据包含一级菜单的内容; 2. 给主ListView的每个item设置点击事件,在点击事件中创建一个子ListView并设置Adapter,Adapter中的数据包含二级菜单的内容; 3. 将子ListView添加到主ListView的item中。 以下是一个简单的示例代码: ``` public class MainActivity extends AppCompatActivity { private ListView mListView; private List<String> mMainList; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); initData(); initView(); } private void initData() { mMainList = new ArrayList<>(); mMainList.add("主菜单1"); mMainList.add("主菜单2"); mMainList.add("主菜单3"); } private void initView() { mListView = findViewById(R.id.listview_main); MainAdapter mainAdapter = new MainAdapter(); mListView.setAdapter(mainAdapter); } private class MainAdapter extends BaseAdapter { @Override public int getCount() { return mMainList.size(); } @Override public Object getItem(int position) { return mMainList.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) { convertView = LayoutInflater.from(MainActivity.this).inflate(R.layout.item_main, parent, false); holder = new ViewHolder(); holder.tvMain = convertView.findViewById(R.id.tv_main); holder.lvSub = convertView.findViewById(R.id.lv_sub); convertView.setTag(holder); } else { holder = (ViewHolder) convertView.getTag(); } final String mainText = mMainList.get(position); holder.tvMain.setText(mainText); holder.tvMain.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { SubAdapter subAdapter = new SubAdapter(); holder.lvSub.setAdapter(subAdapter); } }); return convertView; } } private static class ViewHolder { TextView tvMain; ListView lvSub; } private class SubAdapter extends BaseAdapter { private List<String> mSubList; public SubAdapter() { mSubList = new ArrayList<>(); mSubList.add("二级菜单1"); mSubList.add("二级菜单2"); mSubList.add("二级菜单3"); } @Override public int getCount() { return mSubList.size(); } @Override public Object getItem(int position) { return mSubList.get(position); } @Override public long getItemId(int position) { return position; } @Override public View getView(int position, View convertView, ViewGroup parent) { if (convertView == null) { convertView = LayoutInflater.from(MainActivity.this).inflate(R.layout.item_sub, parent, false); } String subText = mSubList.get(position); TextView tvSub = convertView.findViewById(R.id.tv_sub); tvSub.setText(subText); return convertView; } } } ``` 其中,item_main.xml和item_sub.xml分别对应主ListView的item布局和子ListView的item布局,可以根据自己的需求进行修改。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值