需要自己继承BaseExpandableListAdapter,重写Child与Group相关的方法.

解决方案 »

  1.   

    直接操作你的List或Map,通知adapter刷新,数据就变了,楼上这位注意如果仅仅操作数据,无需派生adatper
      

  2.   

    package com.pei;import java.util.ArrayList;
    import java.util.HashMap;import java.util.Map;import android.app.Activity;
    import android.app.AlertDialog;
    import android.content.Context;
    import android.content.DialogInterface;import android.os.Bundle;
    import android.os.Handler;
    import android.os.Message;
    import android.view.LayoutInflater;
    import android.view.View;
    import android.view.ViewGroup;
    import android.view.View.OnClickListener;
    import android.widget.BaseAdapter;import android.widget.ImageButton;
    import android.widget.ImageView;import android.widget.ListView;
    import android.widget.TextView;public class OrderListView extends Activity {
    private ArrayList<Map<String, Object>> arrayList = new ArrayList<Map<String, Object>>();
    private Map<String, Object> map;
    MyAdapter adapter = null; /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.order_list);
    initDate();
    adapter = new MyAdapter(this);
    ListView list = (ListView) findViewById(R.id.order_list);
    list.setAdapter(adapter); } private void initDate() {
    arrayList.clear();
    HashMap<String, Object> user1 = new HashMap<String, Object>();
    user1.put("img", R.drawable.gohome);
    user1.put("username", "家庭模式");
    arrayList.add(user1);
    HashMap<String, Object> user2 = new HashMap<String, Object>();
    user2.put("img", R.drawable.bar);
    user2.put("username", "酒吧模式");
    arrayList.add(user2);
    HashMap<String, Object> user3 = new HashMap<String, Object>();
    user3.put("img", R.drawable.love);
    user3.put("username", "梦幻模式");
    arrayList.add(user3);
    HashMap<String, Object> user4 = new HashMap<String, Object>();
    user4.put("img", R.drawable.crazy);
    user4.put("username", "疯狂模式");
    arrayList.add(user4);
    HashMap<String, Object> user5 = new HashMap<String, Object>();
    user5.put("img", R.drawable.user_male);
    user5.put("username", "自定义模式");
    arrayList.add(user5);
    } public Handler handler = new Handler() {
    public void handleMessage(Message msg) {
    switch (msg.what) {
    case 1:
    arrayList.remove(msg.arg1);
    adapter.notifyDataSetChanged();
    break;
    }
    super.handleMessage(msg);
    }
    }; public class MyAdapter extends BaseAdapter { private LayoutInflater inflater; public MyAdapter(Context c) {
    this.inflater = LayoutInflater.from(c);
    } @Override
    public int getCount() {
    return arrayList.size();
    } @Override
    public Object getItem(int arg0) {
    return null;
    } @Override
    public long getItemId(int arg0) {
    return 0;
    } public View getView(int arg0, View arg1, ViewGroup arg2) {
    View myView = inflater.inflate(R.layout.modeldelectlist, null);
    TextView textView4 = (TextView) myView.findViewById(R.id.name);
    ImageView img = (ImageView) myView.findViewById(R.id.img);
    ImageButton button = (ImageButton) myView.findViewById(R.id.ImageButton01);
    textView4.setText((String) arrayList.get(arg0).get("username"));
    // img.setImageDrawable(arrayList.get(arg0).get("img"));
    button.setFocusable(false);
    final int arg = arg0;
    // 添加事件响应
    button.setOnClickListener(new OnClickListener() {
    @Override
    public void onClick(View v) {
    new AlertDialog.Builder(OrderListView.this).setTitle(
    "您确定要删除吗?").setPositiveButton("确定",
    new DialogInterface.OnClickListener() {
    public void onClick(DialogInterface dialog,
    int whichButton) {
    Message message = new Message();
    message.what = 1;
    message.arg1 = arg;
    handler.sendMessage(message);
    }
    }).setNegativeButton("取消",
    new DialogInterface.OnClickListener() {
    public void onClick(DialogInterface dialog,
    int whichButton) {
    }
    }).show();
    }
    });
    return myView;
    }
    }
    }
      

  3.   

    直接操作你adapter绑定的List或Map影射即可,数据改变使用adapter的notifyDataSetChanged()方法即可
      

  4.   

    非常感谢 斯玛特 ,可是恕小弟笨拙,按照你提示,我搞了一晚上没想出方法,也许是自己思维僵化了,哎!
    我只是想实现两个方法,一个是addGroup(String groupName)和addChild(String groupName, String childName),前一个是根据groupName添加一个组,后者是根据groupName在对应的组中添加名为childName的子元素,不知咋整?想得自己都要崩溃,紧急求救这个是Activity类public class ActivityMain extends Activity {

        public final static int MENU_ADD = Menu.FIRST;   
        public final static int MENU_DELETE = Menu.FIRST + 1;    private ExpandableListView expandList;
    private InfoDetailsAdapter adapter;

    private Activity activity;

    private List<String> group;
    private List<List<String>> child;    // 初始化group child内容   
        public void initialData() {   
            group = new ArrayList<String>();   
            child = new ArrayList<List<String>>();   
      
            addInfo("家人", new String[] { "老头子", "老妈", "老哥" });   
            
        }
        
        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() {   
    public boolean onGroupClick(ExpandableListView parent, View v,
    int groupPosition, long id) {
                    Toast.makeText(activity, "[Group Click]:" + groupPosition, Toast.LENGTH_SHORT).show(); 
    return false;
    }   
      
            });
            
            expandList.setOnChildClickListener(new OnChildClickListener() {
    public boolean onChildClick(ExpandableListView arg0, View arg1,
    int arg2, int arg3, long arg4) {
                    Toast.makeText(activity, "[Child Click]:" + arg2 + ":" + arg3,   
                            Toast.LENGTH_SHORT).show();    return false;
    }   
                 
            });  
            
            expandList.setOnCreateContextMenuListener(new OnCreateContextMenuListener() {
             public void onCreateContextMenu(ContextMenu menu, View v,
    ContextMenuInfo menuInfo) {
    ExpandableListContextMenuInfo info=(ExpandableListContextMenuInfo)menuInfo;
    String title=((TextView)info.targetView).getText().toString();
    menu.setHeaderTitle(title);

    menu.add(0, CONTEXTMENU_DELETED, 0, "删除联系人");
    }
    });
            
            
            
            
            
        }

    private static final int CONTEXTMENU_DELETED = Menu.FIRST; //删除
        
        // 下述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);   
        }   
        
    @Override
    public boolean onContextItemSelected(MenuItem item) {
    boolean flag=false;

    ExpandableListContextMenuInfo menuInfo=(ExpandableListContextMenuInfo)item.getMenuInfo();
    String title=((TextView)menuInfo.targetView).getText().toString();
    int type=ExpandableListView.getPackedPositionType(menuInfo.packedPosition);

    if (type==ExpandableListView.PACKED_POSITION_TYPE_CHILD) {
    int groupPos =ExpandableListView.getPackedPositionGroup(menuInfo.packedPosition);
    int childPos =ExpandableListView.getPackedPositionChild(menuInfo.packedPosition);

    CharSequence str="您单击了"+title;
    Toast.makeText(this, str, Toast.LENGTH_SHORT).show();


    flag= true;
    }

    else {
    if (type == ExpandableListView.PACKED_POSITION_TYPE_GROUP) {
                int groupPos = ExpandableListView.getPackedPositionGroup(menuInfo.packedPosition); 
                CharSequence cs="您单击了"+title;
                Toast.makeText(this, cs, Toast.LENGTH_SHORT).show();
                
                flag= true;
            }
    }
     
    return flag;
    }
      
        public boolean onOptionsItemSelected(MenuItem item) {   
            switch (item.getItemId()) {   
            case MENU_ADD:   
                
                createDialogAdd();   
                dialogAdd.show();   
                break;   
            case MENU_DELETE:   
                
                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() {   
            
            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();   
                }   
            });   
        } 
    }感觉十分困苦,我只想实现上面说的两个方法,可自己忒笨,一晚上没整出来,望能帮帮忙,多谢了!