zoukankan      html  css  js  c++  java
  • Android 动态添加删除ExpandableListView的item的例子

    这个例子可以学习到如下几点: 
    1.通过自定义Dialog(单独布局的xml文件进行弹出显示) 
    2.通过menu点击监听添加,删除view中的items 
    3.点击ExpandableListView中group和child的事件监听

    下面是代码: 
    1.ExpandableListViewStudy.Java

    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内容)

    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布局文件

    <?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

    <?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

    <?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>  
  • 相关阅读:
    一个配置引发的血案
    软件工程之学习方法篇
    开篇
    重拾《 两周自制脚本语言 》- 中文关键字与原生函数
    重拾《 两周自制脚本语言 》- 支持中文标识符
    将《 两周自制脚本语言 》测试中使用的接口中文化
    5分钟入门LingaScript-尝鲜中文版TypeScript
    为《 两周自制脚本语言 》添加中文测试代码
    2019-02-18 扩展Python控制台实现中文反馈信息之二-正则替换
    2019-02-14 1992年日本对母语编程的可读性比较实验
  • 原文地址:https://www.cnblogs.com/zhujiabin/p/6211382.html
Copyright © 2011-2022 走看看