如何在删除一行时使用列表中的集更改

时间:2014-08-30 14:58:36

标签: java android listview expandablelistview

我正在使用可扩展的listView和Expandable ListAdapter。 ChlidView向我展示标题,子视图显示我的子标题。 在“子视图”中,我有一个删除特定行的按钮。 我有两个类,一个用于将数据从数据库加载到hashMap,另一个用于ExpandableListAdapter。我在适配器类上创建onClick方法,并且删除功能正在运行,但列表没有刷新更新的数据。我知道我需要再次将数据加载到hashMap,但是适配器类是在第一个类之外。我正在尝试使用“notifyDataSetChanged”而没有结果。

第1课:

hand = new DbHandler(getActivity());
        fullList = new HashMap<ArrayList<ClockModel>, ArrayList<ClockModel>>();
        temp = new ArrayList<ClockModel>();
        ArrayList<ClockModel> child = new ArrayList<ClockModel>();
        child = hand.getDay(workName);


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


            if(child.get(i).getDateMonth() == month && child.get(i).getDateYear()==year){

            ClockModel m1 = new ClockModel(
                    child.get(i).getId(),
                    child.get(i).getWorkName(),
                    child.get(i).getDateDay(), 
                    child.get(i).getDateMonth(),
                    );
                    temp.add(m1);       
                    fullList.put(temp, temp);

            }
        }


       adapter = new ExpandableListCustom(getActivity(), fullList,temp);
       lv.setAdapter(adapter);

适配器:

@Override
public View getChildView(final int groupPosition, final int childPosition,
        boolean isLastChild, View convertView, ViewGroup parent) {
    //final String childText = (String) getChild(groupPosition, childPosition);

    if (convertView == null) {
        LayoutInflater infalInflater = (LayoutInflater) 
                this.context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        convertView = infalInflater.inflate(R.layout.row_child,null);

    }

    TextView txMyVal = (TextView) convertView.findViewById(R.id.row_myVal);
    TextView txBreakTime = (TextView) convertView.findViewById(R.id.row_breakTime);
    TextView txComment = (TextView) convertView.findViewById(R.id.row_comments);
    TextView txNameOfDay = (TextView) convertView.findViewById(R.id.row_nameOfDay);

    String comments=    fullList.get(child).get(groupPosition).getComment();
     nameOfDay= fullList.get(child).get(groupPosition).getNameOfDay();
     shiftType= fullList.get(child).get(groupPosition).getShiftType();
    int breakTime=  fullList.get(child).get(groupPosition).getBreakTime();


    currentPosition = fullList.get(child).get(groupPosition).getId(); 

    btnRemove = (ImageButton) convertView.findViewById(R.id.row_btnRemove);
    btnRemove.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {

            hand.deleteDay(currentPosition);
            Toast.makeText(context, "Del : "+currentPosition, 2000).show();     

        }
    });





public class ExpandableListCustom extends BaseExpandableListAdapter implements OnClickListener  {


    DbHandler hand;
    private Context context;
    private HashMap<ArrayList<ClockModel>,ArrayList<ClockModel> > fullList; //Headers
    ArrayList<ClockModel> child; //data

    MySharedPreferences preferences;
    public ExpandableListCustom(Context context,
            HashMap<ArrayList<ClockModel>, ArrayList<ClockModel>> fullList,
            ArrayList<ClockModel> child) {
        super();
        this.context = context;
        this.fullList = fullList;
        this.child = child;
        clockSet = new Clock();
        preferences = new MySharedPreferences(context);
        hand = new DbHandler(context);



    }


    @Override
    public Object getChild(int groupPosition, int childPosition) {
        // TODO Auto-generated method stub
        return this.fullList.get(this.fullList.get(childPosition));
    }


    @Override
    public long getChildId(int groupPosition, int childPosition) {
        return childPosition;
    }


    @Override
    public View getChildView(final int groupPosition, final int childPosition,
            boolean isLastChild, View convertView, ViewGroup parent) {
        //final String childText = (String) getChild(groupPosition, childPosition);

        if (convertView == null) {
            LayoutInflater infalInflater = (LayoutInflater) 
                    this.context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            convertView = infalInflater.inflate(R.layout.row_child,null);

        }

        TextView txMyVal = (TextView) convertView.findViewById(R.id.row_myVal);
        TextView txBreakTime = (TextView) convertView.findViewById(R.id.row_breakTime);
        TextView txComment = (TextView) convertView.findViewById(R.id.row_comments);
        TextView txNameOfDay = (TextView) convertView.findViewById(R.id.row_nameOfDay);


        enterHour=  (int) fullList.get(child).get(groupPosition).getEnterHour();
        exitHour=   (int) fullList.get(child).get(groupPosition).getExitHour();
        enterMin=   (int) fullList.get(child).get(groupPosition).getEnterMin();
        exitMin=    (int) fullList.get(child).get(groupPosition).getExitMin();





        currentPosition = fullList.get(child).get(groupPosition).getId(); 
        btnRemove = (ImageButton) convertView.findViewById(R.id.row_btnRemove);
        btnRemove.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {


                hand.deleteDay(currentPosition);
                Toast.makeText(context, "Del : "+currentPosition, 2000).show();     


            }
        });


        return convertView;
    }



    @Override
    public int getChildrenCount(int groupPosition) {
        // TODO Auto-generated method stub //////////////////////////////////////////
        //  return this.fullList.get(groupPosition).size();
        if(fullList != null){
            return 1;
        }else{
            return 0;
        }

    }





    @Override
    public Object getGroup(int groupPosition) {
        // TODO Auto-generated method stub
        return this.fullList.get(child).get(groupPosition);
    }


    @Override
    public int getGroupCount() {
        if(fullList != null){
            return this.fullList.size();
        }else{
            return 0;
        }
    }


    @Override
    public long getGroupId(int groupPosition) {
        return groupPosition;
    }



    @Override
    public View getGroupView(int groupPosition, boolean isExpanded,
            View convertView, ViewGroup parent) {


        int dateDay= fullList.get(child).get(groupPosition).getDateDay();
        int dateMonth= fullList.get(child).get(groupPosition).getDateMonth();
        int dateYear= fullList.get(child).get(groupPosition).getDateYear();



        if (convertView == null) {
            LayoutInflater infalInflater = (LayoutInflater) this.context.getSystemService
                    (Context.LAYOUT_INFLATER_SERVICE);
            convertView = infalInflater.inflate(R.layout.row_header, null);
        }


        return convertView;
    }




    @Override
    public boolean isChildSelectable(int groupPosition, int childPosition) {
        // TODO Auto-generated method stub
        return true;
    }

    @Override
    public boolean hasStableIds() {
        // TODO Auto-generated method stub
        return false;
    }








}

2 个答案:

答案 0 :(得分:0)

现在,当您从数据库中删除该项目时,您需要同时将其从适配器中删除并调用notifyDataSetChanged()

    @Override
    public void onClick(View v) {

        hand.deleteDay(currentPosition);
        fullList.remove(currentPosition);
         notifyDataSetChanged();
    }

答案 1 :(得分:0)

您需要从数据库中获取数据并分配给arraylist“fullList”,当您删除数据并使用时,它将用于适配器...

notifyDataSetChanged();

适配器的方法......