2016-07-28 11 views
0

各グループの下に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人なので、配列は自分のデータより小さくありません。

+0

[Android:EditTextはListViewのスクロールでコンテンツを失う?](http://stackoverflow.com/questions/9328301/android-edittext-loses-content-on-scroll-in-listview) – SaravInfern

+0

これはリストビューの場合。私は拡張可能なリストビューを持っています。 –

+0

これはmater @mike_x_ではなく、スクロールする前に値を保存するために 'addTextChangedListener'を使用する必要があります。値を保持しないと保存されないデータが失われます。 –

答えて

0

問題は、TestWatcherです。それは、多くの時間、それぞれのメソッドを起動し、私はなぜそれを発見していない。そのため、ソリューションはFocusChangeListenerを使用するか、フィールドを埋めるためにalertDialogを表示する方がはるかに優れていました。次にポジティブボタンをクリックすると、配列にデータが保存されました。

TextWatcherを置き換えることで、私は問題を解決することができました。

関連する問題