滚动时,带有Edittext的可扩展列表视图显示错误数据?

时间:2013-10-11 15:38:19

标签: android android-layout expandablelistview expandablelistadapter

一切正常并且视图正确显示唯一的问题是当我向下滚动时,子视图数据是EditText数据正在交换。

public class FieldFormAdapter extends BaseExpandableListAdapter {

    private Activity _context;
    private List<String> _listDataHeader; 
    private HashMap<String, List<String>> _listDataChild;
    private FieldWorkModel fieldWorkModel ;
    public FieldFormAdapter(Activity context, List<String> listDataHeader,
            HashMap<String, List<String>> listChildData) {
        this._context = context;
        this._listDataHeader = listDataHeader;
        this._listDataChild = listChildData;
    }

    @Override
    public Object getChild(int groupPosition, int childPosititon) {
        return this._listDataChild.get(this._listDataHeader.get(groupPosition))
                .get(childPosititon);
    }

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

//Two Views 4 EditText and last one is a Button
    @Override
    public int getChildType(int groupPosition, int childPosition) {
        return childPosition==4?1:0;
    }

    @Override
    public int getChildTypeCount() {
        return 2;
    }

    @Override
    public View getChildView(final int groupPosition, final int childPosition,
            boolean isLastChild, View convertView, ViewGroup parent) {
        Viewholder viewholder = null;

        LayoutInflater infalInflater = (LayoutInflater) this._context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        int type = getChildType(groupPosition, childPosition);
        if (convertView == null) {          
            if(type==0)
            {   
                viewholder = new Viewholder();
                convertView = infalInflater.inflate(R.layout.field_work_edit, null);
                viewholder.edittext = (EditText) convertView.findViewById(R.id.field_work);
                convertView.setTag(viewholder);
            }
            else if (type==1)
            {
                viewholder = new Viewholder();
                convertView = infalInflater.inflate(R.layout.field_work_save, null);
                viewholder.button = (Button) convertView.findViewById(R.id.save_observation);
                convertView.setTag(viewholder);
            }

        }
        else 
            viewholder = (Viewholder) convertView.getTag();


        if(type==0)
            setView(type, childPosition, viewholder.edittext, null, groupPosition);
        if(type==1)
            setView(type, childPosition, null, viewholder.button, groupPosition);


        return convertView;
    }

    private void setView(int type , final int childPosition, EditText txtListChild,Button b,final int groupPosition)
    {
        fieldWorkModel = new FieldWorkModel();
        final String childText = (String) getChild(groupPosition, childPosition);
        if(type==0)
        {
            if(childText.equals("Observations 1")||childText.equals("Observations 2")||childText.equals("Observations 3")||childText.equals("Observations 4"))
                txtListChild.setHint(childText);
            else
                txtListChild.setText(childText);


            txtListChild.addTextChangedListener(new TextWatcher() {

                @Override
                public void onTextChanged(CharSequence s, int start, int before, int count) {
                    if(childPosition==0)
                        fieldWorkModel.setObservation1(s.toString());
                    else if(childPosition==1)
                        fieldWorkModel.setObservation2(s.toString());
                    else if(childPosition==2)
                        fieldWorkModel.setObservation3(s.toString());
                    else if(childPosition==3)
                        fieldWorkModel.setObservation4(s.toString());
                }               
                @Override
                public void beforeTextChanged(CharSequence s, int start, int count, int after) {}

                @Override
                public void afterTextChanged(Editable s) {}
            });
        }
        if(type==1)
        {
            b.setOnClickListener(new OnClickListener() {

                @Override
                public void onClick(View v) {
                    StoreFactory factory = new StoreFactory((Activity) _context, 2);
                    if(factory.getFieldByTitle((String) getGroup(groupPosition)))
                        factory.updateField(fieldWorkModel, (String) getGroup(groupPosition));
                    else
                        factory.fieldStore((String) getGroup(groupPosition), fieldWorkModel);

                }
            });
        }
    }


    private static class Viewholder
    {
        EditText edittext; 
        Button   button; 
    }

    @Override
    public int getChildrenCount(int groupPosition) {
        return this._listDataChild.get(this._listDataHeader.get(groupPosition))
                .size();
    }

    @Override
    public Object getGroup(int groupPosition) {
        return this._listDataHeader.get(groupPosition);
    }

    @Override
    public int getGroupCount() {
        return this._listDataHeader.size();
    }

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

    @Override
    public View getGroupView(int groupPosition, boolean isExpanded,
            View convertView, ViewGroup parent) {
        String headerTitle = (String) getGroup(groupPosition);
        if (convertView == null) {
            LayoutInflater infalInflater = (LayoutInflater) this._context
                    .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            convertView = infalInflater.inflate(R.layout.old_event_item, null);
        }

        TextView lblListHeader = (TextView) convertView
                .findViewById(R.id.old_event_button);
        lblListHeader.setTypeface(null, Typeface.BOLD);
        lblListHeader.setText(headerTitle);

        if(isExpanded)
            lblListHeader.setCompoundDrawablesWithIntrinsicBounds( R.drawable.pdf, 0, R.drawable.up_arrow, 0);
        else
            lblListHeader.setCompoundDrawablesWithIntrinsicBounds( R.drawable.pdf, 0, R.drawable.down_arrow, 0);
        lblListHeader.setPadding(5, 12, 5, 12);
        lblListHeader.setTextSize(18);
        lblListHeader.setTypeface(Typeface.SANS_SERIF);
        return convertView;
    }

    @Override
    public boolean hasStableIds() {
        return false;
    }

    @Override
    public boolean isChildSelectable(int groupPosition, int childPosition) {
        return true;
    }
}

0 个答案:

没有答案
相关问题