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>  
  • 相关阅读:
    笔记35 跨重定向请求传递数
    判断邮箱的正则表达式
    按钮
    async await 的用法
    笔记34 Spring MVC的高级技术——处理multipart形式的数据
    Convert Sorted Array to Binary Search Tree
    Binary Tree Zigzag Level Order Traversal
    Unique Binary Search Trees,Unique Binary Search Trees II
    Validate Binary Search Tree
    Populating Next Right Pointers in Each Node,Populating Next Right Pointers in Each Node II
  • 原文地址:https://www.cnblogs.com/zhujiabin/p/6211382.html
Copyright © 2011-2022 走看看