2017-08-05 11 views
0

次のように私は子供としてEditTextViewsのカップルを使用しているExpandableListViewを持っている:私はのEditTextフィールドのいずれかで何かを入力するときEditTextView内容

enter image description here

問題がされますグループを閉じて、内容が分離されたグループに複製されるか、時にはそれらの両方に複製されます。

私のアダプタはちょうどここに、子ビューの固定数を返すコードです:

public class MyAdapter extends BaseExpandableListAdapter { 
    @Override 
    public int getGroupCount() { 
     return 3; 
    } 

    @Override 
    public int getChildrenCount(int groupPosition) { 
     return 1; 
    } 

    @Override 
    public Object getGroup(int groupPosition) { 
     return null; 
    } 

    @Override 
    public Object getChild(int groupPosition, int childPosition) { 
     return null; 
    } 

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

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

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

    @Override 
    public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) { 
     //Inflate layout and return rowView 

     return rowView; 
    } 

    @Override 
    public View getChildView(final int groupPosition, int childPosition, boolean isLastChild, View convertView, ViewGroup parent) { 
     //Inlfate layout and return rowView 
     return rowView; 
    } 

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

私はViewHolderを使用してみましたが、私は同じ結果を得ます。内容が重複しないようにするために何をする必要がありますか?

答えて

0

ExpandableListViewの問題は、子ビューを展開するたびにgetChildViewが呼び出されることです。これにより、ビューが再利用されます。

@Override 
public View getChildView(final int groupPosition, final int childPosition, boolean isLastChild, View convertView, ViewGroup parent) { 
    convertView = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_child, parent, false); 

    final EditText etFirstName = (EditText) convertView.findViewById(R.id.et_first_name); 
    final String value = holder.get(String.valueOf(groupPosition + childPosition)); 

    etFirstName.addTextChangedListener(new TextWatcher() { 
     @Override 
     public void beforeTextChanged(CharSequence s, int start, int count, int after) { 

     } 

     @Override 
     public void onTextChanged(CharSequence s, int start, int before, int count) { 

     } 

     @Override 
     public void afterTextChanged(Editable s) { 
      holder.put(String.valueOf(groupPosition + childPosition), s.toString()); 
     } 
    }); 

    if (value != null){ 
     etFirstName.setText(value); 
    } 

    return convertView; 
} 
:子ビューのレイアウトを膨張させると EditText

private String title; 

private HashMap<String, String> holder = new HashMap<>(); 

public MyAdapter(String title){ 
    this.title = title; 
} 

そしてgetChildView方法で私は、次の手順を実行の値を格納するHashMapを作成することによって、このI無効ビューのリサイクルを解決するために

複数のビューで同じことを可能にするには、モデルオブジェクトを作成して、をキーとして使用できます。HashMap