您的位置:首页 > 其它

动态添加删除ExpandableListView的item的例子

2013-08-16 10:06 567 查看
这个例子可以学习到如下几点:

1.通过自定义Dialog(单独布局的xml文件进行弹出显示)

2.通过menu点击监听添加,删除view中的items

3.点击ExpandableListView中group和child的事件监听

下面是代码:

1.ExpandableListViewStudy.java

[java] view
plaincopy

package cn.com.example;

import java.util.ArrayList;

import java.util.List;

import android.app.Activity;

import android.app.Dialog;

import android.os.Bundle;

import android.util.Log;

import android.view.Menu;

import android.view.MenuItem;

import android.view.View;

import android.view.View.OnClickListener;

import android.widget.Button;

import android.widget.EditText;

import android.widget.ExpandableListView;

import android.widget.Toast;

import android.widget.ExpandableListView.OnChildClickListener;

import android.widget.ExpandableListView.OnGroupClickListener;

public class ExpandableListViewStudy extends Activity {

public final static int MENU_ADD = Menu.FIRST;

public final static int MENU_DELETE = Menu.FIRST + 1;

ExpandableListView expandList;

InfoDetailsAdapter adapter;

Activity activity;

List<String> group;

List<List<String>> child;

// 初始化group child内容

public void initialData() {

group = new ArrayList<String>();

child = new ArrayList<List<String>>();

addInfo("group 1", new String[] { "one 1", "two 1", "three 1" });

addInfo("group 2", new String[] { "one 2", "two 2", "three 2" });

addInfo("group 3", new String[] { "one 3", "two 3", "three 3" });

}

public void addInfo(String p, String[] c) {

group.add(p);

List<String> item = new ArrayList<String>();

for (int i = 0; i < c.length; i++) {

item.add(c[i]);

}

child.add(item);

}

/** Called when the activity is first created. */

@Override

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.main);

activity = this;

expandList = (ExpandableListView) findViewById(R.id.expandList);

// 初始化各级元素

initialData();

// 适配器内容

adapter = new InfoDetailsAdapter(this, group, child);

expandList.setAdapter(adapter);

expandList.setOnGroupClickListener(new OnGroupClickListener() {

@Override

public boolean onGroupClick(ExpandableListView arg0, View arg1,

int arg2, long arg3) {

// TODO Auto-generated method stub

System.out.println("The row id of the group clicked" + arg3);

Toast.makeText(activity, "[Group Click]:" + arg2,

Toast.LENGTH_SHORT).show();

return false;

}

});

expandList.setOnChildClickListener(new OnChildClickListener() {

@Override

public boolean onChildClick(ExpandableListView arg0, View arg1,

int arg2, int arg3, long arg4) {

// TODO Auto-generated method stub

Toast.makeText(activity, "[Child Click]:" + arg2 + ":" + arg3,

Toast.LENGTH_SHORT).show();

return false;

}

});

}

// 下述2个函数处理Menu按钮的事件

public boolean onCreateOptionsMenu(Menu menu) {

// TODO Auto-generated method stub

menu.add(0, MENU_ADD, 0, " 添加 ");

menu.add(0, MENU_DELETE, 0, " 删除 ");

return super.onCreateOptionsMenu(menu);

}

public boolean onOptionsItemSelected(MenuItem item) {

switch (item.getItemId()) {

case MENU_ADD:

Log.i("", "FRIEND_ID");

createDialogAdd();

dialogAdd.show();

break;

case MENU_DELETE:

Log.i("", "FRIEND_ID");

createDialogDelete();

dialogDelete.show();

break;

}

return super.onOptionsItemSelected(item);

}

EditText add_name, add_phone, add_sex, add_home;

EditText delete_id;

Button add_ok, add_no;

Button delete_ok, delete_no;

Dialog dialogAdd, dialogDelete;

public void createDialogAdd() {

Log.i("", "createDialogAdd");

View viewAdd = this.getLayoutInflater().inflate(R.layout.add, null);

dialogAdd = new Dialog(this);

dialogAdd.setContentView(viewAdd);

dialogAdd.setTitle("输入新成员信息");

add_name = (EditText) viewAdd.findViewById(R.id.add_name);

add_phone = (EditText) viewAdd.findViewById(R.id.add_phone);

add_sex = (EditText) viewAdd.findViewById(R.id.add_sex);

add_home = (EditText) viewAdd.findViewById(R.id.add_home);

add_ok = (Button) viewAdd.findViewById(R.id.add_ok);

add_no = (Button) viewAdd.findViewById(R.id.add_no);

add_ok.setOnClickListener(new OnClickListener() {

public void onClick(View v) {

// TODO Auto-generated method stub

String[] data = { add_phone.getText().toString(),

add_sex.getText().toString(),

add_home.getText().toString() };

addInfo(add_name.getText().toString(), data);

dialogAdd.dismiss();

adapter.notifyDataSetChanged();

}

});

add_no.setOnClickListener(new OnClickListener() {

public void onClick(View v) {

// TODO Auto-generated method stub

dialogAdd.dismiss();

}

});

}

public void createDialogDelete() {

View viewDelete = this.getLayoutInflater().inflate(R.layout.delete,

null);

dialogDelete = new Dialog(this);

dialogDelete.setContentView(viewDelete);

dialogDelete.setTitle("删除指定成员");

delete_id = (EditText) viewDelete.findViewById(R.id.delete_id);

delete_ok = (Button) viewDelete.findViewById(R.id.delete_ok);

delete_no = (Button) viewDelete.findViewById(R.id.delete_no);

delete_ok.setOnClickListener(new OnClickListener() {

public void onClick(View v) {

// TODO Auto-generated method stub

String id = delete_id.getText().toString();

if (!id.equals("")) {

int i = Integer.parseInt(id);

group.remove(i);

child.remove(i);

dialogDelete.dismiss();

adapter.notifyDataSetChanged();

}

}

});

delete_no.setOnClickListener(new OnClickListener() {

public void onClick(View v) {

// TODO Auto-generated method stub

dialogDelete.dismiss();

}

});

}

}

2.InfoDetailsAdapter.java(适配器文件,用于提供给View内容)

[java] view
plaincopy

package cn.com.example;

import java.util.List;

import android.app.Activity;

import android.view.Gravity;

import android.view.View;

import android.view.ViewGroup;

import android.widget.AbsListView;

import android.widget.BaseExpandableListAdapter;

import android.widget.TextView;

//为expandable list view 提供内容的基类

public class InfoDetailsAdapter extends BaseExpandableListAdapter {

Activity activity;

List<String> group;

List<List<String>> child;

public InfoDetailsAdapter(Activity a, List<String> group,

List<List<String>> child) {

activity = a;

this.group = group;

this.child = child;

}

// child method stub

@Override

public Object getChild(int groupPosition, int childPosition) {

// TODO Auto-generated method stub

// System.out.println("*******************"+child.get(groupPosition).get(childPosition));

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

}

@Override

public long getChildId(int groupPosition, int childPosition) {

// TODO Auto-generated method stub

return childPosition;

}

@Override

public int getChildrenCount(int groupPosition) {

// TODO Auto-generated method stub

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

}

@Override

public View getChildView(int groupPosition, int childPosition,

boolean isLastChild, View convertView, ViewGroup parent) {

// TODO Auto-generated method stub

String string = child.get(groupPosition).get(childPosition);

return getGenericView(string);

}

// group method stub

@Override

public Object getGroup(int groupPosition) {

// TODO Auto-generated method stub

return group.get(groupPosition);

}

@Override

public long getGroupId(int groupPosition) {

// TODO Auto-generated method stub

return groupPosition;

}

@Override

public int getGroupCount() {

// TODO Auto-generated method stub

return group.size();

}

@Override

public View getGroupView(int groupPosition, boolean isExpanded,

View convertView, ViewGroup parent) {

// TODO Auto-generated method stub

String string = group.get(groupPosition);

return getGenericView(string);

}

// View stub to create Group/Children 's View

public TextView getGenericView(String s) {

// Layout parameters for the ExpandableListView

AbsListView.LayoutParams lp = new AbsListView.LayoutParams(

ViewGroup.LayoutParams.FILL_PARENT, 64);

TextView text = new TextView(activity);

text.setLayoutParams(lp);

// Center the text vertically

text.setGravity(Gravity.CENTER_VERTICAL | Gravity.LEFT);

// Set the text starting position

text.setPadding(36, 0, 0, 0);

text.setText(s);

return text;

}

@Override

public boolean hasStableIds() {

// TODO Auto-generated method stub

return false;

}

@Override

public boolean isChildSelectable(int groupPosition, int childPosition) {

// TODO Auto-generated method stub

return true;

}

}

至于里面的方法各自起什么作用,可以自己进行测试。

3.main.xml布局文件

[xhtml] view
plaincopy

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

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

android:orientation="vertical" android:layout_width="fill_parent"

android:layout_height="fill_parent" android:id="@+id/layout">

<ExpandableListView android:id="@+id/expandList"

android:layout_width="fill_parent" android:layout_height="wrap_content" />

</LinearLayout>

4.add.xml

[xhtml] view
plaincopy

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

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

android:orientation="vertical" android:layout_width="fill_parent"

android:layout_height="fill_parent">

<LinearLayout android:orientation="horizontal"

android:layout_width="wrap_content" android:layout_height="wrap_content">

<TextView android:layout_width="wrap_content"

android:layout_height="wrap_content" android:text="姓名:" />

<EditText android:id="@+id/add_name" android:layout_width="200dip"

android:layout_height="wrap_content" />

</LinearLayout>

<LinearLayout android:orientation="horizontal"

android:layout_width="wrap_content" android:layout_height="wrap_content">

<TextView android:layout_width="wrap_content"

android:layout_height="wrap_content" android:text="电话:" />

<EditText android:id="@+id/add_phone" android:layout_width="200dip"

android:layout_height="wrap_content" />

</LinearLayout>

<LinearLayout android:orientation="horizontal"

android:layout_width="wrap_content" android:layout_height="wrap_content">

<TextView android:layout_width="wrap_content"

android:layout_height="wrap_content" android:text="性别:" />

<EditText android:id="@+id/add_sex" android:layout_width="200dip"

android:layout_height="wrap_content" />

</LinearLayout>

<LinearLayout android:orientation="horizontal"

android:layout_width="wrap_content" android:layout_height="wrap_content">

<TextView android:layout_width="wrap_content"

android:layout_height="wrap_content" android:text="住址:" />

<EditText android:id="@+id/add_home" android:layout_width="200dip"

android:layout_height="wrap_content" />

</LinearLayout>

<LinearLayout android:orientation="horizontal"

android:layout_width="wrap_content" android:layout_height="wrap_content">

<Button android:id="@+id/add_ok" android:layout_width="90dip"

android:layout_height="wrap_content" android:text="OK" />

<Button android:id="@+id/add_no" android:layout_width="90dip"

android:layout_height="wrap_content" android:text="NO" />

</LinearLayout>

</LinearLayout>

这个布局可以优化一下

5.delete.xml

[xhtml] view
plaincopy

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

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

android:orientation="vertical" android:layout_width="fill_parent"

android:layout_height="fill_parent">

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

android:orientation="horizontal" android:layout_width="wrap_content"

android:layout_height="wrap_content">

<TextView android:layout_width="wrap_content"

android:layout_height="wrap_content" android:text="ID:" />

<EditText android:id="@+id/delete_id" android:layout_width="200dip"

android:layout_height="wrap_content" />

</LinearLayout>

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

android:orientation="horizontal" android:layout_width="wrap_content"

android:layout_height="wrap_content">

<Button android:id="@+id/delete_ok" android:layout_width="90dip"

android:layout_height="wrap_content" android:text="OK" />

<Button android:id="@+id/delete_no" android:layout_width="90dip"

android:layout_height="wrap_content" android:text="NO" />

</LinearLayout>

</LinearLayout>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: