各グループの下にeditTextボックスを含む展開可能なビューを作成しました。editTextボックスの値をAndroidの拡張リストビューに保存する
public class ExpandableActivity extends AppCompatActivity {
ExpandableListAdapter listAdapter;
ExpandableListView expListView;
List<String> listDataHeader;
HashMap<String, List<String>> listDataChild;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_expandable);
expListView = (ExpandableListView) findViewById(R.id.expandableListView);
expListView.setDescendantFocusability(ViewGroup.FOCUS_AFTER_DESCENDANTS);
// preparing list data
//custom function that populates listDataHeader and listDataChild
prepareListData();
listAdapter = new ExpandableListAdapter(this, listDataHeader, listDataChild);
expListView.setAdapter(listAdapter);
アダプターコード:
ので、私は、この値があまりにも他のエディットボックスに失われたり、コピーされるか、編集ボックスにテキストを入力するたびにビューを再利用することで、アダプタの機能、のpublic class ExpandableListAdapter extends BaseExpandableListAdapter {
private Context context;
private List<String> listDataHeader;
private HashMap<String, List<String>> listDataChild;
public ExpandableListAdapter(Context context, List<String> listDataHeader,
HashMap<String, List<String>> listChildData) {
this.context = context;
this.listDataHeader = listDataHeader;
this.listDataChild = listChildData;
}
@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.e_list_item, null);
}
TextView vw_text_sub = (TextView) convertView.findViewById(R.id.esubt);
EditText vw_edit = (EditText) convertView.findViewById(R.id.eedit);
vw_text_sub.setText(childText);
vw_edit.addTextChangedListener(new TextWatcher() {
@Override
public void onTextChanged(CharSequence arg0, int arg1, int arg2, int arg3) {
//store value?
}
@Override
public void beforeTextChanged(CharSequence arg0, int arg1, int arg2, int arg3) {
}
@Override
public void afterTextChanged(Editable arg0) {
}
});
return convertView;
}
@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.e_list_group, null);
}
TextView vw_header = (TextView) convertView.findViewById(R.id.eheader);
vw_header.setTypeface(null, Typeface.BOLD);
vw_header.setText(headerTitle);
return convertView;
}
// other overridden methods here....
}
私は上下にスクロールしています。
リストビューでは、配列はエディットボックスの値を格納するために使用されます。
拡張リストビューでは、どのような方法が最適ですか?配列の配列? リストビューではなく、展開可能なリストビューの例を提供できますか?
EDIT:これを試みたが、私も問題を抱えて:
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.e_list_item, null);
}
TextView vw_text_sub = (TextView) convertView.findViewById(R.id.esubt);
EditText vw_edit = (EditText) convertView.findViewById(R.id.eedit);
vw_text_sub.setText(childText);
if(tmp[groupPosition][childPosition] != null) {
vw_edit.setText(tmp[groupPosition][childPosition]);
}else{
vw_edit.setText("");
}
vw_edit.addTextChangedListener(new TextWatcher() {
@Override
public void onTextChanged(CharSequence arg0, int arg1, int arg2, int arg3) {
tmp[groupPosition][childPosition] = arg0.toString();
}
@Override
public void beforeTextChanged(CharSequence arg0, int arg1, int arg2, int arg3) {
}
@Override
public void afterTextChanged(Editable arg0) {
}
});
return convertView;
}
TMPは配列文字列[10] [10]です。私のグループは3人で、子供はグループ内で最大7人なので、配列は自分のデータより小さくありません。
[Android:EditTextはListViewのスクロールでコンテンツを失う?](http://stackoverflow.com/questions/9328301/android-edittext-loses-content-on-scroll-in-listview) – SaravInfern
これはリストビューの場合。私は拡張可能なリストビューを持っています。 –
これはmater @mike_x_ではなく、スクロールする前に値を保存するために 'addTextChangedListener'を使用する必要があります。値を保持しないと保存されないデータが失われます。 –