6

Я разрабатываю Expandablelistview на Android.Android: getChild() Значения EditText при нажатии кнопки в ExpandableListView

В GroupView есть только заголовок, и каждая группа имеет другой ChildView.

Этот код работает нормально, и я могу видеть разные элементы ChildView в каждой группе.

В ChildView у меня есть EditText, и когда я нажимаю кнопку «Готово», я хочу получить все значения EditText и Spinner, которые являются входами пользователя.

Когда я нажимаю на кнопку Готово в то время, я хочу, чтобы получить информацию, которая заполняется пользователем в группы элементов CustomerLocation и т.д.

Для примера: изображение, показанное на вопрос. Я хочу получить данные ввода, которые заполняются пользователем в vehicle и TEST группе.

Пожалуйста, мне нужна помощь, я хочу получить значения, которые заполняются пользователем в каждом текстовом редакторе ChildText.

Вот мой код:

MainActivity.java

public class MainActivity extends Activity { 

    Context mContext; 
    private ExpandableListView mExpandableListView; 
    CustomAdapter mCustomAdapter; 

    ArrayList<String> newCalibration = new ArrayList<String>(); 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 

     mContext = MainActivity.this; 

     newCalibration.add("CUSTOMER"); 
     newCalibration.add("LOCATION"); 
     newCalibration.add("VEHICLE"); 
     newCalibration.add("TEST"); 
     newCalibration.add("ABC"); 

     /* genarate data for list view */ 
     // genarateData(); 
     /* instantiate adapter with our item list */ 
     mCustomAdapter = new CustomAdapter(mContext, newCalibration); 
     /* we get list view */ 
     mExpandableListView = (ExpandableListView) findViewById(R.id.explist_tools); 
     /* set adapter to list view */ 
     mExpandableListView.setAdapter(mCustomAdapter); 

     mExpandableListView 
       .setOnGroupExpandListener(new OnGroupExpandListener() { 

        int previousGroup = -1; 

        @Override 
        public void onGroupExpand(int groupPosition) { 
         // TODO Auto-generated method stub 
         if (groupPosition != previousGroup) { 
          mExpandableListView.collapseGroup(previousGroup); 
          previousGroup = groupPosition; 
         } 
        } 
       }); 

    } 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     // Inflate the menu; this adds items to the action bar if it is present. 
     getMenuInflater().inflate(R.menu.activity_main, menu); 
     return true; 
    } 
} 

CustomAdapter.java

public class CustomAdapter extends BaseExpandableListAdapter { 

    private LayoutInflater layoutInflater; 

    /* list of parent */ 
    private ArrayList<String> mParents; 

    public CustomAdapter(Context context, ArrayList<String> parents) { 
     super(); 
     this.mParents = parents; 
     layoutInflater = (LayoutInflater) context 
       .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
    } 

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

    @Override 
    public long getChildId(int parentPosition, int childPosition) { 
     // TODO Auto-generated method stub 
     return childPosition; 
    } 

    @Override 
    public View getChildView(int parentPosition, int childPosition, boolean b, 
      View convertView, ViewGroup viewGroup) { 
     if (convertView == null) { 
      convertView = layoutInflater 
        .inflate(R.layout.list_item_child, null); 

     } 
     EditText mEdTxt_1 = (EditText) convertView.findViewById(R.id.edtxt_1); 
     EditText mEdTxt_2 = (EditText) convertView.findViewById(R.id.edtxt_2); 
     EditText mEdTxt_3 = (EditText) convertView.findViewById(R.id.edtxt_3); 
     EditText mEdTxt_4 = (EditText) convertView.findViewById(R.id.edtxt_4); 
     EditText mEdTxt_5 = (EditText) convertView.findViewById(R.id.edtxt_5); 
     RelativeLayout relativeLayout = (RelativeLayout) convertView 
       .findViewById(R.id.relativeLayout); 
     mEdTxt_1.setVisibility(View.VISIBLE); 
     mEdTxt_2.setVisibility(View.VISIBLE); 
     mEdTxt_3.setVisibility(View.VISIBLE); 
     mEdTxt_4.setVisibility(View.VISIBLE); 
     mEdTxt_5.setVisibility(View.VISIBLE); 
     relativeLayout.setVisibility(View.VISIBLE); 

     if (mParents.get(parentPosition).equals("CUSTOMER")) { 
      mEdTxt_4.setVisibility(View.GONE); 
      mEdTxt_5.setVisibility(View.GONE); 
      relativeLayout.setVisibility(View.GONE); 
     } else if (mParents.get(parentPosition).equals("LOCATION")) { 
      mEdTxt_4.setVisibility(View.GONE); 
      mEdTxt_5.setVisibility(View.GONE); 
      relativeLayout.setVisibility(View.GONE); 
     } else if (mParents.get(parentPosition).equals("VEHICLE")) { 
      relativeLayout.setVisibility(View.GONE); 
     } else if (mParents.get(parentPosition).equals("TAXIMETER/BCT")) { 
      mEdTxt_3.setVisibility(View.GONE); 
      mEdTxt_4.setVisibility(View.GONE); 
      mEdTxt_5.setVisibility(View.GONE); 
     } else if (mParents.get(parentPosition).equals("TIRE SPECS")) { 
      mEdTxt_4.setVisibility(View.GONE); 
      mEdTxt_5.setVisibility(View.GONE); 
      relativeLayout.setVisibility(View.GONE); 
     } 
     return convertView; 
    } 

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

    @Override 
    public Object getGroup(int parentPosition) { 
     // TODO Auto-generated method stub 
     return mParents.get(parentPosition); 
    } 

    @Override 
    public int getGroupCount() { 
     // TODO Auto-generated method stub 
     return mParents.size(); 
    } 

    @Override 
    public long getGroupId(int parentPosition) { 
     // TODO Auto-generated method stub 
     return parentPosition; 
    } 

    @Override 
    public View getGroupView(int parentPosition, boolean isExpanded, 
      View convertView, ViewGroup viewGroup) { 
     TextView groupName = null; 
     String parent = (String) getGroup(parentPosition); 
     if (convertView == null) { 
      convertView = layoutInflater.inflate(R.layout.list_item_parent, 
        null); 
     } 
     groupName = (TextView) convertView.findViewById(R.id.txt_parentname); 
     groupName.setText(parent); 
     return convertView; 
    } 

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

    @Override 
    public boolean isChildSelectable(int i, int i1) { 
     return true; 
    } 

} 

list_item_child.xml

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/item_child" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical" > 

    <EditText 
     android:id="@+id/edtxt_1" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:gravity="left" 
     android:inputType="text" /> 

    <EditText 
     android:id="@+id/edtxt_2" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:gravity="left" 
     android:inputType="text" /> 

    <EditText 
     android:id="@+id/edtxt_3" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:gravity="left" 
     android:inputType="text" /> 

    <EditText 
     android:id="@+id/edtxt_4" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:gravity="left" 
     android:inputType="text" /> 

    <EditText 
     android:id="@+id/edtxt_5" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:gravity="left" 
     android:inputType="text" /> 

    <RelativeLayout 
     android:id="@+id/relativeLayout" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" > 

     <RadioGroup 
      android:id="@+id/radio_group" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:orientation="horizontal" > 

      <RadioButton 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:checked="true" 
       android:text="Radio 1" /> 

      <RadioButton 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:text="Radio 2" /> 
     </RadioGroup> 

     <TextView 
      android:id="@+id/txt_childname" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_alignParentLeft="true" 
      android:layout_below="@+id/radio_group" 
      android:text="TaxiMeter ?" 
      android:textAppearance="?android:attr/textAppearanceSmall" /> 

     <Switch 
      android:id="@+id/switch1" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_alignParentRight="true" 
      android:layout_below="@+id/radio_group" 
      android:text="Switch" /> 
    </RelativeLayout> 

</LinearLayout> 

Изображения: enter image description here

enter image description here

Спасибо!

+0

эй у вас есть ответ? –

ответ

1

Вы не сможете пройти через список и получить значения непосредственно из представлений, что, вероятно, вы планируете делать.

Вместо этого просто отслеживайте значения, когда пользователь вводит их. Вы можете сохранить хэш-карту имени поля -> значение в своем адаптере или действии. Каждый раз, когда пользователь меняет значение в поле, обновите это поле с новым значением в hashmap. Когда они нажимают, вы можете выполнить итерацию по карте, чтобы получить список всех полей, которые пользователь изменил, и значения, которые они изменили.

Чтобы получить значения полей, как пользователь изменяет их, используйте TextWatcher:

myEditText.addTextChangedListener(new TextWatcher() { 
    ... 
    @Override 
    onTextChanged(CharSequence newText, int start, int before, int count) { 
     myMapOfFieldsToValues.set(myFieldName, newText); 
    } 
} 

Вы можете добавить, что getChildView в адаптере. Вы можете вывести myFieldName из положения родителя и дочернего элемента.

+0

эй, но если у меня есть два одинаковых значения для разных edittext, чем мы можем узнать, какое значение позиции изменяется для edittext – Mahesh

+0

Вам просто нужно использовать два разных ключа на карте. У вас, вероятно, не будет двух текстов редактирования для одного и того же имени поля.Если вы это сделаете, вы всегда можете указать свою карту на месте. –