6

Sto sviluppando Expandablelistview in Android.Android: getChild() Modifica valori di testo sul pulsante clic in ExpandableListView

In GroupView ha solo un titolo e ogni gruppo ha ChildView diverso.

Questo codice funziona correttamente e sono in grado di vedere diversi ChildView in ogni elemento del gruppo.

In ChildView ho un EditText e quando faccio clic sul pulsante Fine voglio ottenere tutti i valori EditText e Spinner che vengono immessi dall'utente.

Quando clicco sul pulsante fatto in quel momento, voglio ottenere i dettagli che viene riempito dall'utente in articoli Gruppo CustomerLocation ecc

Per un esempio: l'immagine mostrata in questione. Voglio ottenere i dettagli di input che sono stati inseriti dall'utente negli articoli vehicle e TEST.

Per favore, ho bisogno di aiuto, voglio ottenere valori che sono compilati dall'utente in ogni elemento del gruppo EditText del bambino.

Ecco il mio codice:

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> 

Immagini: enter image description here

enter image description here

Grazie!

+0

ehi hai la risposta? –

risposta

1

Non si sarà in grado di scorrere l'elenco e ottenere direttamente i valori dalle viste, che è probabilmente ciò che si stava progettando di fare.

Invece, è sufficiente tenere traccia dei valori mentre l'utente li inserisce. Puoi mantenere una mappa hash del nome del campo -> valore nell'adattatore o nell'attività. Ogni volta che l'utente modifica un valore in un campo, aggiorna il campo con il nuovo valore nella hashmap. Quando premono, puoi scorrere sulla mappa per ottenere un elenco di tutti i campi modificati dall'utente e dei valori in cui li hanno modificati.

per ottenere i valori dei campi come l'utente li cambia, utilizzare un TextWatcher:

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

Si può aggiungere che per getChildView l'adattatore. È possibile derivare myFieldName dalla posizione di genitore e figlio.

+0

hey, ma se ho due lo stesso valore per edittext diverso da come possiamo scoprire quale valore di posizione è cambiato per edittext – Mahesh

+0

Hai solo bisogno di utilizzare due chiavi diverse nella mappa. Probabilmente non avrai due testi di modifica per lo stesso nome di campo.Se lo fai, puoi sempre digitare la mappa sulla posizione. –