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

android ExpandableListView二级列表

2015-07-13 22:30 615 查看
做项目前自己整理的一套比较完善的    ExpandableListView二级列表     里面还包含计算价格和CheckBox选择   希望可以帮到你们。










//MainActivity类

在这里我我在代码里默认展开了所有子节点

/**

* 展开所有 group 父节点

*/

for (int i = 0, count = expandableListView.getCount(); i < count; i++) {

expandableListView.expandGroup(i);

}

public class MainActivity extends Activity implements

ExpandableListView.OnChildClickListener,

ExpandableListView.OnGroupClickListener {

private ExpandableListView expandableListView;

private ArrayList<Group> groupList;

private ArrayList<List<People>> childList;

private MyexpandableListAdapter adapter;

private TextView sellTv;

@Override

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_new_parts);

expandableListView = (ExpandableListView) findViewById(R.id.expandablelist);

sellTv = (TextView) findViewById(R.id.sellTv);

sellTv.getPaint().setFakeBoldText(true);

// setTextStyles(sellTv, 30);

initData();

adapter = new MyexpandableListAdapter(this);

expandableListView.setAdapter(adapter);

/**

* 展开所有 group 父节点

*/

for (int i = 0, count = expandableListView.getCount(); i < count; i++) {

expandableListView.expandGroup(i);

}

expandableListView.setOnChildClickListener(this);

expandableListView.setOnGroupClickListener(this);

}

/**

* 必须事先在assets底下创建一fonts文件夹 并放入要使用的字体文件(.ttf)

* 并提供相对路径给creatFromAsset()来创建Typeface对象

*/

@SuppressWarnings("unused")

private void setTextStyles(TextView textTv, int textSize) {

Typeface fontFace = Typeface.createFromAsset(getAssets(),

"blackcircle.ttf");

textTv.setTypeface(fontFace);

textTv.setTextColor(getResources().getColor(R.color.orange));

textTv.setTextSize(textSize);

}

/***

* InitData

*/

void initData() {

groupList = new ArrayList<Group>();

Group group = null;

for (int i = 0; i < 5; i++) {

group = new Group();

group.setTitle("机油、机滤:" + i);

groupList.add(group);

}

childList = new ArrayList<List<People>>();

for (int i = 0; i < groupList.size(); i++) {

ArrayList<People> childTemp;

if (i == 0) {

childTemp = new ArrayList<People>();

for (int j = 0; j < 3; j++) {

People people = new People();

people.setName("世博 刹车片(前)" + j);

people.setPrice("130");

childTemp.add(people);

}

} else if (i == 1) {

childTemp = new ArrayList<People>();

for (int j = 0; j < 4; j++) {

People people = new People();

people.setName("世博 S4蓄电池" + j);

people.setPrice("430");

childTemp.add(people);

}

} else {

childTemp = new ArrayList<People>();

for (int j = 0; j < 5; j++) {

People people = new People();

people.setName("世博 刹车片(后)" + j);

people.setPrice("30");

childTemp.add(people);

}

}

childList.add(childTemp);

}

}

//activity_new_parts的xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

xmlns:tools="http://schemas.android.com/tools"

android:layout_width="match_parent"

android:layout_height="match_parent"

android:background="#FFFFFF"

android:orientation="vertical" >

<RelativeLayout

android:id="@+id/expandablelistRl"

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:layout_weight="1"

android:background="#FFFFFF" >

<ExpandableListView

android:id="@+id/expandablelist"

android:layout_width="match_parent"

android:layout_height="match_parent"

android:layout_alignParentLeft="true"

android:childDivider="@drawable/child_bg"

android:childIndicatorLeft="0dp"

android:divider="#C1CDCD"

android:dividerHeight="1dp"

android:groupIndicator="@null"

android:listSelector="#ffffffff"

android:scrollbarAlwaysDrawHorizontalTrack="true"

android:scrollbars="none" >

</ExpandableListView>

</RelativeLayout>

<RelativeLayout

android:layout_width="match_parent"

android:layout_height="130dp"

android:layout_weight="1"

android:background="#FFFFFF" >

<Button

android:id="@+id/button1"

android:layout_width="60dip"

android:layout_height="30dip"

android:layout_alignParentRight="true"

android:layout_centerVertical="true"

android:layout_marginRight="16dp"

android:background="#EE3B3B"

android:text="提交订单"

android:textColor="#FFFFFF" />

<TextView

android:id="@+id/sellTv"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:layout_alignTop="@+id/button1"

android:layout_toRightOf="@+id/sellTv1"

android:text="¥30"

android:textColor="#EE3B3B"

android:textSize="30sp"

android:textStyle="bold" />

<TextView

android:id="@+id/sellTv1"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:layout_alignBottom="@+id/button1"

android:layout_alignParentLeft="true"

android:layout_marginLeft="13dp"

android:text="总价格:"

android:textSize="18sp" />

</RelativeLayout>

</LinearLayout>

//适配数据的Adapter 我这里做成了内部类

@SuppressWarnings("unused")

class MyexpandableListAdapter extends BaseExpandableListAdapter {

private Context context;

private LayoutInflater inflater;

public MyexpandableListAdapter(Context context) {

this.context = context;

inflater = LayoutInflater.from(context);

}

// 返回父列表个数

@Override

public int getGroupCount() {

return groupList.size();

}

// 返回子列表个数

@Override

public int getChildrenCount(int groupPosition) {

return childList.get(groupPosition).size();

}

@Override

public Object getGroup(int groupPosition) {

return groupList.get(groupPosition);

}

@Override

public Object getChild(int groupPosition, int childPosition) {

return childList.get(groupPosition).get(childPosition);

}

@Override

public long getGroupId(int groupPosition) {

return groupPosition;

}

@Override

public long getChildId(int groupPosition, int childPosition) {

return childPosition;

}

@Override

public boolean hasStableIds() {

return true;

}

@Override

public View getGroupView(int groupPosition, boolean isExpanded,

View convertView, ViewGroup parent) {

GroupHolder groupHolder = null;

if (convertView == null) {

groupHolder = new GroupHolder();

convertView = inflater.inflate(R.layout.group_item, null);

groupHolder.grouptTv = (TextView) convertView

.findViewById(R.id.group);

groupHolder.imageView = (ImageView) convertView

.findViewById(R.id.image);

groupHolder.grouptTv.setTextSize(16);

groupHolder.grouptTv.setPadding(30, 0, 0, 0);

convertView.setTag(groupHolder);

} else {

groupHolder = (GroupHolder) convertView.getTag();

}

groupHolder.grouptTv.setText(((Group) getGroup(groupPosition))

.getTitle());

if (isExpanded)

groupHolder.imageView.setImageResource(R.drawable.expanded);

else

groupHolder.imageView.setImageResource(R.drawable.collapse);

return convertView;

}

ChildHolder childHolder = null;

@Override

public View getChildView(final int groupPosition,

final int childPosition, boolean isLastChild, View convertView,

ViewGroup parent) {

if (convertView == null) {

childHolder = new ChildHolder();

convertView = inflater.inflate(R.layout.child_item, null);

// 更换配件名称

childHolder.bath_Repairing = (TextView) convertView

.findViewById(R.id.bath_Repairing);

// 配件价格

childHolder.priceTv = (TextView) convertView

.findViewById(R.id.priceTv);

childHolder.priceTv = (TextView) convertView

.findViewById(R.id.priceTv);

childHolder.partsCheckBox = (CheckBox) convertView

.findViewById(R.id.cb_item_parts);

childHolder.priceTv.setTextSize(18);

childHolder.bath_Repairing.setPadding(30, 0, 0, 0);

childHolder.bath_Repairing.setTextSize(18);

convertView.setTag(childHolder);

} else {

childHolder = (ChildHolder) convertView.getTag();

}

childHolder.bath_Repairing.setText(((People) getChild(

groupPosition, childPosition)).getName());

childHolder.priceTv.setText("¥ "

+ ((People) getChild(groupPosition, childPosition))

.getPrice());

childHolder.bath_Repairing

.setOnClickListener(new OnClickListener() {

@Override

public void onClick(View v) {

setDiaLog();

}

});

if (!childList.get(groupPosition).get(childPosition).getChecked()) {

childHolder.partsCheckBox.setChecked(false);

childHolder.bath_Repairing.setTextColor(getResources()

.getColor(R.color.black));

childHolder.priceTv.setTextColor(getResources().getColor(

R.color.black));

childHolder.bath_Repairing.setTextSize(18);

} else {

childHolder.partsCheckBox.setChecked(true);

childHolder.bath_Repairing.setTextColor(getResources()

.getColor(R.color.blue));

childHolder.priceTv.setTextColor(getResources().getColor(

R.color.orange));

childHolder.bath_Repairing.setTextSize(20);

}

childHolder.partsCheckBox.setOnClickListener(new OnClickListener() {

@Override

public void onClick(View v) {

CheckBox checkBox = (CheckBox) v;

childList.get(groupPosition).get(childPosition)

.setChecked(checkBox.isChecked());

notifyDataSetChanged();

// TODO 更新总价格

updateTotal();

}

});

return convertView;

}

@Override

public boolean isChildSelectable(int groupPosition, int childPosition) {

return true;

}

}

private void updateTotal() {

sellTv.setText("总价格:¥" + getTotal1());

}

private String getTotal1() {

BigDecimal total = new BigDecimal("30");

for (int i = 0; i < childList.size(); i++) {

for (int j = 0; j < childList.get(i).size(); j++) {

if (childList.get(i).get(j).getChecked()) {

total = total.add(new BigDecimal(childList.get(i).get(j)

.getPrice()));

}

}

}

return total.toString();

}

private void setDiaLog() {

List<Bean> list = new ArrayList<Bean>();

Bean bean = new Bean();

for (int i = 0; i < 10; i++) {

bean.setName("nihai" + i);

list.add(bean);

}

final Dialog dialog = new Dialog(MainActivity.this, R.style.MyDialog);

LinearLayout layout = (LinearLayout) LayoutInflater.from(this).inflate(

R.layout.dialog_peijian, null);

dialog.setContentView(layout);

dialog.getWindow().setLayout(

android.view.ViewGroup.LayoutParams.WRAP_CONTENT,

android.view.ViewGroup.LayoutParams.WRAP_CONTENT);

Window window = dialog.getWindow();

window.setGravity(Gravity.CENTER);

window.setBackgroundDrawableResource(android.R.color.transparent);

ImageView ivfinsh = (ImageView) layout

.findViewById(R.id.iv_dialog_peijian_finsh);

ivfinsh.setOnClickListener(new OnClickListener() {

@Override

public void onClick(View arg0) {

dialog.dismiss();

}

});

ListView lvContent = (ListView) layout

.findViewById(R.id.lv_dialog_peijian_content);

lvContent.setAdapter(new AdapterTest(this, list));

lvContent.setOnItemClickListener(new OnItemClickListener() {

@Override

public void onItemClick(AdapterView<?> parent, View view, int arg2,

long arg3) {

dialog.dismiss();

}

});

dialog.show();

}

/**

* 父节点的点击事件 reture true 禁止点击

*/

@Override

public boolean onGroupClick(final ExpandableListView parent, final View v,

int groupPosition, final long id) {

Toast.makeText(getApplicationContext(),

groupList.get(groupPosition).getTitle(), 0).show();

return false;

}

/**

* 子节点的点击事件 reture true 禁止点击

*/

@Override

public boolean onChildClick(ExpandableListView parent, View v,

int groupPosition, int childPosition, long id) {

Toast.makeText(getApplicationContext(),

childList.get(groupPosition).get(childPosition).getName(), 0)

.show();

return false;

}

class GroupHolder {

TextView grouptTv;

ImageView imageView;

}

class ChildHolder {

TextView bath_Repairing;

TextView priceTv;

ImageView imageView;

CheckBox partsCheckBox;

}

//父节点的xml(group_item)

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

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:gravity="center_vertical" >

<RelativeLayout

android:layout_width="match_parent"

android:layout_height="40dip"

android:background="#C1CDCD"

android:gravity="center_vertical" >

<ImageView

android:id="@+id/image"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:layout_alignParentRight="true"

android:layout_centerVertical="true"

android:src="@drawable/collapse"

android:visibility="gone" />

<TextView

android:id="@+id/group"

android:layout_width="wrap_content"

android:layout_height="match_parent"

android:layout_alignParentLeft="true"

android:layout_alignParentTop="true"

android:drawableLeft="@drawable/hero_d"

android:drawablePadding="10dp"

android:gravity="center_vertical"

android:text="父节点"

android:textColor="#8B8386" />

</RelativeLayout>

</RelativeLayout>

//子节点的XML(child_item)

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

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"

android:layout_width="fill_parent"

android:layout_height="wrap_content"

android:background="@drawable/selector_item"

android:gravity="center_vertical" >

<RelativeLayout

android:layout_width="fill_parent"

android:layout_height="50dip"

android:gravity="center_vertical" >

<TextView

android:id="@+id/bath_Repairing"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:layout_centerVertical="true"

android:drawablePadding="10dip"

android:drawableRight="@drawable/location_green_sanjiao"

android:text="子节点" />

<TextView

android:id="@+id/priceTv"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:layout_centerVertical="true"

android:layout_toLeftOf="@+id/cb_item_parts"

android:paddingRight="15dip"

android:text="¥135"

android:textColor="#EE7942" />

<CheckBox

android:id="@+id/cb_item_parts"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:layout_alignParentRight="true"

android:layout_centerVertical="true"

android:layout_marginRight="15dp"

android:button="@drawable/create_order_cb"

android:gravity="center_vertical" />

</RelativeLayout>

</RelativeLayout>

源码下载:http://download.csdn.net/detail/u013752594/8895807
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: