ListView的二级菜单——doublelist

原创 2015年11月21日 13:11:36

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

这里主要实现了一个二级菜单,并且将所点击的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);
        btn_10.setOnClickListener(this);
        btn_11.setOnClickListener(this);
        btn_12.setOnClickListener(this);
        btn_13.setOnClickListener(this);
        btn_14.setOnClickListener(this);
        btn_15.setOnClickListener(this);

    }


    @Override
    public void onClick(View v) {
        switch (v.getId()){
            case R.id.btn_0:
                bundle.putInt("id",0);
                StartActivity(DoubleListActivity.class,bundle);
                break;
            case R.id.btn_1:
                bundle.putInt("id",1);
                StartActivity(DoubleListActivity.class, bundle);
                break;
            case R.id.btn_2:
                bundle.putInt("id",2);
                StartActivity(DoubleListActivity.class, bundle);
                break;
            case R.id.btn_3:
                bundle.putInt("id",3);
                StartActivity(DoubleListActivity.class, bundle);
                break;
            case R.id.btn_4:
                bundle.putInt("id",4);
                StartActivity(DoubleListActivity.class, bundle);
                break;
            case R.id.btn_5:
                bundle.putInt("id",5);
                StartActivity(DoubleListActivity.class, bundle);
                break;
            case R.id.btn_6:
                bundle.putInt("id",6);
                StartActivity(DoubleListActivity.class, bundle);
                break;
            case R.id.btn_7:
                bundle.putInt("id",7);
                StartActivity(DoubleListActivity.class, bundle);
                break;
            case R.id.btn_8:
                bundle.putInt("id",8);
                StartActivity(DoubleListActivity.class, bundle);
                break;
            case R.id.btn_9:
                bundle.putInt("id",9);
                StartActivity(DoubleListActivity.class, bundle);
                break;
            case R.id.btn_10:
                bundle.putInt("id",10);
                StartActivity(DoubleListActivity.class, bundle);
                break;
            case R.id.btn_11:
                bundle.putInt("id",11);
                StartActivity(DoubleListActivity.class, bundle);
                break;
            case R.id.btn_12:
                bundle.putInt("id",12);
                StartActivity(DoubleListActivity.class, bundle);
                break;
            case R.id.btn_13:
                bundle.putInt("id",13);
                StartActivity(DoubleListActivity.class, bundle);
                break;
            case R.id.btn_14:
                bundle.putInt("id",14);
                StartActivity(DoubleListActivity.class, bundle);
                break;
            case R.id.btn_15:
                bundle.putInt("id",15);
                StartActivity(DoubleListActivity.class, bundle);
                break;

        }
    }

    private void StartActivity(Class activity, Bundle bundle){
        Intent intent = new Intent(MainActivity.this,activity);
        intent.putExtras(bundle);
        startActivity(intent);
    }

}

主要是点击button将想要显示的list的位置传过去。

DoubleListActivity:

    public class DoubleListActivity extends ActionBarActivity{

        private ListView mainlist;
        private ListView morelist;
        private String[] ClassifyMain;
        private String[][] ClassifyMore;
        ClassifyMainAdapter mainAdapter;
        ClassifyMoreAdapter moreAdapter;
        private int get_id;
        private int a = -1;
        private int main_postion = -1;
        private int list_id;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.doublelist_layout);
        initdata();
        initview();
    }

    private void initdata() {
        Bundle bundle = new Bundle();
        bundle = this.getIntent().getExtras();
        get_id = bundle.getInt("id");
        ClassifyMain = getResources().getStringArray(R.array.main);
        ClassifyMore = new String[][] {
                getResources().getStringArray(R.array.more_0),
                getResources().getStringArray(R.array.more_1),
                getResources().getStringArray(R.array.more_2),
                getResources().getStringArray(R.array.more_3),
                getResources().getStringArray(R.array.more_4),
                getResources().getStringArray(R.array.more_5),
                getResources().getStringArray(R.array.more_6),
                getResources().getStringArray(R.array.more_7),
                getResources().getStringArray(R.array.more_8),
                getResources().getStringArray(R.array.more_9),
                getResources().getStringArray(R.array.more_10),
                getResources().getStringArray(R.array.more_11),
                getResources().getStringArray(R.array.more_12),
                getResources().getStringArray(R.array.more_13),
                getResources().getStringArray(R.array.more_14),
                getResources().getStringArray(R.array.more_15),
        };
    }

    private void initview() {
        mainlist = (ListView) findViewById(R.id.classify_mainlist);
        morelist = (ListView) findViewById(R.id.classify_morelist);
        mainAdapter = new ClassifyMainAdapter(DoubleListActivity.this,ClassifyMain,get_id);
        mainAdapter.setSelectItem(get_id);
        mainlist.setAdapter(mainAdapter);
        mainlist.setSelection(get_id - 1);
        mainlist.setOnItemClickListener(new AdapterView.OnItemClickListener() {

            @Override
            public void onItemClick(AdapterView<?> parent, View view,
                                    int position, long id) {
                initAdapter(ClassifyMore[position]);
                mainAdapter.setSelectItem(position);
                mainAdapter.notifyDataSetChanged();
                a = position * 100;
                main_postion = position;
            }
        });
        mainlist.setChoiceMode(ListView.CHOICE_MODE_SINGLE);
        initAdapter(ClassifyMore[get_id]);

        morelist.setOnItemClickListener(new AdapterView.OnItemClickListener() {

            @Override
            public void onItemClick(AdapterView<?> parent, View view,
                                    int position, long id) {
                moreAdapter.setSelectItem(position);
                moreAdapter.notifyDataSetChanged();
                if (a == -1){
                    a = get_id * 100;
                }
                if (main_postion ==  -1){
                    main_postion = get_id;
                }
                list_id = a + position;
                Bundle bundle = new Bundle();
                bundle.putInt("list_id", list_id);
                bundle.putString("list_item", ClassifyMore[main_postion][position]);
                Intent intent = new Intent(DoubleListActivity.this,ResultActivity.class);
                intent.putExtras(bundle);
                startActivity(intent);
            }
        });
    }

    private void initAdapter(String[] array) {
        moreAdapter = new ClassifyMoreAdapter(this, array);
        morelist.setAdapter(moreAdapter);
        moreAdapter.notifyDataSetChanged();
    }


}

这里主要的是对id的计算,添加了一个int a来过渡,将mainlist的postion乘以100,然后加上morelist的postion得到的值认为是这个所点击的item的id,并将这个id传递下去。这样每一个item也就有了对应的值id。并且还可以将这个item的名字传递下去。
这里我的数组是写在arrays.xml里的:
arrays.xml:

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

    <string-array name="main">
        <item>0</item>
        <item>1</item>
        <item>2</item>
        <item>3</item>
        <item>4</item>
        <item>5</item>
        <item>6</item>
        <item>7</item>
        <item>8</item>
        <item>9</item>
        <item>10</item>
        <item>11</item>
        <item>12</item>
        <item>13</item>
        <item>14</item>
        <item>15</item>
    </string-array>

    <string-array name="more_0">
        <item>000</item>
        <item>001</item>
        <item>002</item>
        <item>003</item>
        <item>004</item>
        <item>005</item>
        <item>006</item>
        <item>007</item>
        <item>008</item>
        <item>009</item>
        <item>010</item>
        <item>011</item>
        <item>012</item>
        <item>013</item>
        <item>014</item>
        <item>015</item>
    </string-array>

    <string-array name="more_1">
        <item>100</item>
        <item>101</item>
        <item>102</item>
        <item>103</item>
        <item>104</item>
        <item>105</item>
        <item>106</item>
        <item>107</item>
        <item>108</item>
        <item>109</item>
        <item>110</item>
        <item>111</item>
        <item>112</item>
        <item>113</item>
        <item>114</item>
        <item>115</item>
    </string-array>

    <string-array name="more_2">
        <item>200</item>
        <item>201</item>
        <item>202</item>
        <item>203</item>
        <item>204</item>
        <item>205</item>
        <item>206</item>
        <item>207</item>
        <item>208</item>
        <item>209</item>
        <item>210</item>
        <item>211</item>
        <item>212</item>
        <item>213</item>
        <item>214</item>
        <item>215</item>
    </string-array>

    <string-array name="more_3">
        <item>300</item>
        <item>301</item>
        <item>302</item>
        <item>303</item>
        <item>304</item>
        <item>305</item>
        <item>306</item>
        <item>307</item>
        <item>308</item>
        <item>309</item>
        <item>310</item>
        <item>311</item>
        <item>312</item>
        <item>313</item>
        <item>314</item>
        <item>315</item>
    </string-array>

    <string-array name="more_4">
        <item>400</item>
        <item>401</item>
        <item>402</item>
        <item>403</item>
        <item>404</item>
        <item>405</item>
        <item>406</item>
        <item>407</item>
        <item>408</item>
        <item>409</item>
        <item>410</item>
        <item>411</item>
        <item>412</item>
        <item>413</item>
        <item>414</item>
        <item>415</item>
    </string-array>

    <string-array name="more_5">
        <item>500</item>
        <item>501</item>
        <item>502</item>
        <item>503</item>
        <item>504</item>
        <item>505</item>
        <item>506</item>
        <item>507</item>
        <item>508</item>
        <item>509</item>
        <item>510</item>
        <item>511</item>
        <item>512</item>
        <item>513</item>
        <item>514</item>
        <item>515</item>
    </string-array>

    <string-array name="more_6">
        <item>600</item>
        <item>601</item>
        <item>602</item>
        <item>603</item>
        <item>604</item>
        <item>605</item>
        <item>606</item>
        <item>607</item>
        <item>608</item>
        <item>609</item>
        <item>610</item>
        <item>611</item>
        <item>612</item>
        <item>613</item>
        <item>614</item>
        <item>615</item>
    </string-array>

    <string-array name="more_7">
        <item>700</item>
        <item>701</item>
        <item>702</item>
        <item>703</item>
        <item>704</item>
        <item>705</item>
        <item>706</item>
        <item>707</item>
        <item>708</item>
        <item>709</item>
        <item>710</item>
        <item>711</item>
        <item>712</item>
        <item>713</item>
        <item>714</item>
        <item>715</item>
    </string-array>

    <string-array name="more_8">
        <item>800</item>
        <item>801</item>
        <item>802</item>
        <item>803</item>
        <item>804</item>
        <item>805</item>
        <item>806</item>
        <item>807</item>
        <item>808</item>
        <item>809</item>
        <item>810</item>
        <item>811</item>
        <item>812</item>
        <item>813</item>
        <item>814</item>
        <item>815</item>
    </string-array>

    <string-array name="more_9">
        <item>900</item>
        <item>901</item>
        <item>902</item>
        <item>903</item>
        <item>904</item>
        <item>905</item>
        <item>906</item>
        <item>907</item>
        <item>908</item>
        <item>909</item>
        <item>910</item>
        <item>911</item>
        <item>912</item>
        <item>913</item>
        <item>914</item>
        <item>915</item>
    </string-array>

    <string-array name="more_10">
        <item>1000</item>
        <item>1001</item>
        <item>1002</item>
        <item>1003</item>
        <item>1004</item>
        <item>1005</item>
        <item>1006</item>
        <item>1007</item>
        <item>1008</item>
        <item>1009</item>
        <item>1010</item>
        <item>1011</item>
        <item>1012</item>
        <item>1013</item>
        <item>1014</item>
        <item>1015</item>
    </string-array>

    <string-array name="more_11">
        <item>1100</item>
        <item>1101</item>
        <item>1102</item>
        <item>1103</item>
        <item>1104</item>
        <item>1105</item>
        <item>1106</item>
        <item>1107</item>
        <item>1108</item>
        <item>1109</item>
        <item>1110</item>
        <item>1111</item>
        <item>1112</item>
        <item>1113</item>
        <item>1114</item>
        <item>1115</item>
    </string-array>

    <string-array name="more_12">
        <item>1200</item>
        <item>1201</item>
        <item>1202</item>
        <item>1203</item>
        <item>1204</item>
        <item>1205</item>
        <item>1206</item>
        <item>1207</item>
        <item>1208</item>
        <item>1209</item>
        <item>1210</item>
        <item>1211</item>
        <item>1212</item>
        <item>1213</item>
        <item>1214</item>
        <item>1215</item>
    </string-array>

    <string-array name="more_13">
        <item>1300</item>
        <item>1301</item>
        <item>1302</item>
        <item>1303</item>
        <item>1304</item>
        <item>1305</item>
        <item>1306</item>
        <item>1307</item>
        <item>1308</item>
        <item>1309</item>
        <item>1310</item>
        <item>1311</item>
        <item>1312</item>
        <item>1313</item>
        <item>1314</item>
        <item>1315</item>
    </string-array>

    <string-array name="more_14">
        <item>1400</item>
        <item>1401</item>
        <item>1402</item>
        <item>1403</item>
        <item>1404</item>
        <item>1405</item>
        <item>1406</item>
        <item>1407</item>
        <item>1408</item>
        <item>1409</item>
        <item>1410</item>
        <item>1411</item>
        <item>1412</item>
        <item>1413</item>
        <item>1414</item>
        <item>115</item>
    </string-array>

    <string-array name="more_15">
        <item>1500</item>
        <item>1501</item>
        <item>1502</item>
        <item>1503</item>
        <item>1504</item>
        <item>1505</item>
        <item>1506</item>
        <item>1507</item>
        <item>1508</item>
        <item>1509</item>
        <item>1510</item>
        <item>1511</item>
        <item>1512</item>
        <item>1513</item>
        <item>1514</item>
        <item>1515</item>
    </string-array>

</resources>    

最后的显示界面就不说了,就是两个TextView。

代码很简单,但是这个二级菜单还比较实用,用处还比较多。希望能有帮助。

下面是源码

demo下载地址:http://download.csdn.net/detail/jiang89125/9288249

转载请注明出处:http://blog.csdn.net/jiang89125/article/details/49963725

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

DoubleListView效果

以上是效果图 ------------------------------------代码开始----------------------------------- 先上布局 activity_cat...

Android_ExpandableListView_一个ListView实现二级列表

主要注意使用 ExpandableListView 和  ExpandableListAdapter  Android给我们提供了ExpandableListView类,极大的方便了我们开发二级分类。...

ExpandListview应用(实现二级列表和实现新闻分类)

ExpandListView在我们开发中使用非常常见,但原生的ExpandListView往往会达不到我们使用的效果,我们会以两个例子为例来理解ExpandListView,现在我们看下如何做呢? 实...

android二级listview列表

今天来实现以下大众点评客户端的横向listview二级列表,先看一下样式。   这种横向的listview二级列表在手机软件上还不太常见,但是使用过平板的都应该知道,在平板上市比较常见的。可能是因为平...

Expandablelistview 带有二级菜单的listview

废话不多说,直接上代码: 0、MainActivity:import android.content.Context; import android.os.Bundle; import androi...

ListView 二级菜单

  • 2016-05-26 09:43
  • 2.58MB
  • 下载

Android中ListView实现分类二级下拉菜单的效果

在安卓中有一个ExpandableListView类,通过它我们能够实现listview的分发二级下拉菜单效果, 首先我们需要在布局文件声明它     <ExpandableLi...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)