2016-11-24 11 views
1

listviewのすべての値がスクロールされるときに、child.setCompliance_newComments(finalHolder2.newComplianceComment.getText().toString())というbeanにedittextの値を保存しています。どのように価値と位置を保存するには?
誰でもedittextの値を保存する方法を提案できますか?ExpandableリストビューのスクロールでEditTextの値が失われる

public ComplianceListAdapter(Context context, ArrayList<ComplianceGroupData> datas){ 
    this.context=context; 
    this.groupDatas=datas; 


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

@Override 
public int getChildrenCount(int groupPosition) { 
    ArrayList<ComplianceChildData> ch=groupDatas.get(groupPosition).getChild(); 
    return ch.size(); 
} 

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

@Override 
public Object getChild(int groupPosition, int childPosition) { 
    ArrayList<ComplianceChildData> datas=groupDatas.get(groupPosition).getChild(); 
    return datas.get(childPosition); 
} 

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

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

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


@Override 
public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) { 
    ComplianceGroupData group = (ComplianceGroupData) getGroup(groupPosition); 
    GroupViewHolder holder1 = null; 
    View view=convertView; 
    if (convertView == null){ 
     LayoutInflater layoutInflater=(LayoutInflater)this.context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     view=layoutInflater.inflate(R.layout.compliance_group_row,null); 
     holder1 =new GroupViewHolder(); 
     holder1.group=(TextView)view.findViewById(R.id.tv_header); 
     view.setTag(holder1); 
    } 
    else { 
     holder1 = (GroupViewHolder) view.getTag(); 
    } 
    holder1.group.setInputType(InputType.TYPE_TEXT_FLAG_CAP_WORDS); 
    holder1.group.setText(group.getGroupName()); 

    return view; 
} 

@Override 
public View getChildView(final int groupPosition, final int childPosition, boolean isLastChild, View convertView, ViewGroup parent) { 
    final ComplianceChildData child = (ComplianceChildData)getChild(groupPosition, childPosition); 
    ArrayList<ComplianceChildData> datas=groupDatas.get(groupPosition).getChild(); 
    ChildViewHolder holder = null; 
    View view1 = convertView; 
    if (convertView==null){ 
     LayoutInflater inflater=(LayoutInflater)this.context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     view1=inflater.inflate(R.layout.compliance_child_row_layout,null); 
     holder = new ChildViewHolder(); 
     holder.compliance = (TextView) view1.findViewById(R.id.tv_compliance_list); 
     holder.chk_compliance=(RadioGroup)view1.findViewById(R.id.rg_chk_compliance); 
     holder.complianceYes=(RadioButton)view1.findViewById(R.id.rb_compliance_yes); 
     holder.complianceNo=(RadioButton)view1.findViewById(R.id.rb__compliance_no); 
     holder.complianceNotApplicable=(RadioButton)view1.findViewById(R.id.rb_compliance_not_applicable); 
     holder.oldComplianceComment=(EditText)view1.findViewById(R.id.et_old_compliance_comment); 
     holder.newComplianceComment=(EditText)view1.findViewById(R.id.et_new_compliance_comment); 
     view1.setTag(holder); 
    } 
    else { 
     holder = (ChildViewHolder) view1.getTag(); 
    } 

    holder.compliance.setText(child.getCompliance_name()); 
    holder.oldComplianceComment.setText(child.getCompliance_comment()); 
    holder.chk_compliance.setOnCheckedChangeListener(null); 
    holder.chk_compliance.clearCheck(); 

    switch (child.getCompliance_check()) { 
     case "Yes": 
      holder.complianceYes.setChecked(true); 
      holder.oldComplianceComment.setVisibility(View.VISIBLE); 
      holder.newComplianceComment.setVisibility(View.VISIBLE); 

      break; 
     case "No": 
      holder.complianceNo.setChecked(true); 
      holder.oldComplianceComment.setVisibility(View.VISIBLE); 
      holder.newComplianceComment.setVisibility(View.VISIBLE); 

      break; 
     case "Not Applicable": 
      holder.complianceNotApplicable.setChecked(true); 
      holder.oldComplianceComment.setVisibility(View.VISIBLE); 
      holder.newComplianceComment.setVisibility(View.VISIBLE); 

      break; 
     default: 
      // holder.chk_compliance.clearCheck(); 
      holder.oldComplianceComment.setVisibility(View.GONE); 
      holder.newComplianceComment.setVisibility(View.GONE); 

      break; 
    } 
    final ChildViewHolder finalHolder = holder; 
    holder.chk_compliance.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() { 
     @Override 
     public void onCheckedChanged(RadioGroup group, int checkedId) { 
      int childCount = group.getChildCount(); 
      for (int x = 0; x < childCount; x++) { 
       RadioButton btn = (RadioButton) group.getChildAt(x); 

       if (btn.getId() == checkedId) { 
        child.setCompliance_check(btn.getText().toString()); 
        finalHolder.oldComplianceComment.setVisibility(View.VISIBLE); 
        finalHolder.newComplianceComment.setVisibility(View.VISIBLE); 
        System.out.println("Adapter----->"+child.getCompliance_check()); 

       } 

      } 

     } 
    }); 
    final ChildViewHolder finalHolder2 = holder; 
    holder.newComplianceComment.addTextChangedListener(new TextWatcher() { 

     public void afterTextChanged(Editable s) { 
      child.setCompliance_newComments(finalHolder2.newComplianceComment.getText().toString()); 
      System.out.println("setcomment----->" + finalHolder2.newComplianceComment.getText().toString()); 
      System.out.println("getcomment----->" + child.getCompliance_newComments()); 


     } 
     public void beforeTextChanged(CharSequence s, int start, int count, int after) { 
     } 
     public void onTextChanged(CharSequence s, int start, int before, int count) { 


     } 
    }); 

    return view1; 
} 
@Override 
public boolean isChildSelectable(int groupPosition, int childPosition) { 
    return true; 
} 
private class ChildViewHolder { 
    TextView compliance; 
    RadioGroup chk_compliance; 
    EditText oldComplianceComment,newComplianceComment; 
    RadioButton complianceNo,complianceYes,complianceNotApplicable; 

} 
private class GroupViewHolder { 
    TextView group; 
} 

}

+0

タグをtextviewに設定し、スクロール時にタグを再度取得します。 –

+0

あなたは簡単に説明してください。私はsetTagとgetTagを入れて値を取得しますか? – Babu

+0

'final ChildViewHolder finalHolder = holder;'と 'final ChildViewHolder finalHolder = holder;'です。彼らは役に立たないので、それらを取り除くべきです。彼らは常に 'getGroupView'が最後に呼ばれた項目を指します。 – greenapps

答えて

1

を取得します。それはあなたのシナリオで動作します。

0

あなたののEditTextの値を保存し、いつでも、必要な、それを埋めるために共有プリファレンスを使用することができます...

+0

この値は動的であるため、共有設定を維持することはできません。 – Babu

+0

ビューが展開されるたびにそれを設定します... – raasesh

0

は、各ビューにタグを設定してください。例えば

holder.compliance.setTag(Integer.parseInt(groupPosition+""childPosition)); 

か、私はグループ位置と子の組み合わせを使用している。この場合、タグを認識するsetTagで任意の一意の番号を与えることができますため

その後、
if (convertView==null) { } else { }にグループと子の両方を削除するタグ

holder.compliance.getTag(); 
+0

私は、拡張可能なリストビューをスクロールすると、入力された編集テキストの値が不足しています。値と位置を保存/取得しますか? – Babu

+0

上記の "addTextChangedListener"を参照してください。各文字を入力すると、child.setCompliance_newComments(holder.newComplianceComment.getText()。toString())がスクロールされ、展開可能なリストビューが自動的に削除されます。 – Babu

関連する問題