您的位置:首页 > 移动开发 > Android开发

ListView的二级菜单——doublelist

2015-11-21 13:11 651 查看
先来看效果图



这里主要实现了一个二级菜单,并且将所点击的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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息