Android: getChild () of an EditText value when a button is clicked in an ExpandableListView

I am developing an Expandablelistview on Android.

GroupView has only a title, and each group has a different ChildView.

This code works fine, and I can see different ChildViews in each Group item.

In ChildView, I have an EditText, and when I click the done button, I want to get all the EditText and Spinner values ​​that are the user inputs.

When I click the Finish button at this time, I want to get information that is filled in by the user in the elements of the Customer Location group, etc.

Example: image indicated in the question. I want to get input data that is populated by the user in the vehicle element and TEST .

Please, I need help, I want to get the values ​​that are filled in by the user in each child of the EditText group.

Here is my code:

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> 

Images: enter image description here

enter image description here

Thanks!

+6
source share
1 answer

You will not be able to go through the list and directly get the values ​​from the views, which is probably what you plan to do.

Instead, just keep track of the values ​​as the user enters them. You can save the hash map of the field name β†’ value in your adapter or action. Each time a user changes a value in a field, update that field with a new value in hashmap. When they click, you can iterate over the map to get a list of all the fields that the user changed and the values ​​that they changed.

To get field values ​​when a user changes, use TextWatcher :

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

You can add this to getChildView in your adapter. You can infer myFieldName from the position of the parent and child.

+1
source

Source: https://habr.com/ru/post/947220/


All Articles