6

Ich entwickle Expandable Listview in Android.Android: getChild() EditText Werte auf Knopfdruck in ExpandableListView

In der GroupView hat nur einen Titel und jede Gruppe hat unterschiedliche ChildView.

Dieser Code funktioniert einwandfrei und ich kann verschiedene ChildViews in jedem Gruppenelement sehen.

In ChildView habe ich einen EditText und wenn ich auf done button klicken, möchte ich alle EditText und Spinner-Werte, die Eingaben vom Benutzer sind.

Wenn ich zu dieser Zeit getan Taste auf, ich will Details erhalten, die durch den Benutzer in der Gruppe Artikeln CustomerLocation usw.

Für ein Beispiel gefüllt ist: das Bild gezeigt in Frage. Ich möchte die Eingabedaten erhalten, die vom Benutzer in vehicle und TEST Gruppenartikel gefüllt werden.

Bitte, ich brauche Hilfe, ich möchte Werte erhalten, die vom Benutzer in jedem EditText eines Gruppenelements Child gefüllt wird.

Hier ist mein 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> 

Bilder: enter image description here

enter image description here

Dank!

+0

hey hast du die Antwort? –

Antwort

1

Sie werden nicht in der Lage sein, durch die Liste zu gehen und die Werte von den Ansichten direkt zu bekommen, was wahrscheinlich das ist, was Sie vorhatten.

Stattdessen sollten Sie nur die Werte verfolgen, wenn der Benutzer sie eingibt. Sie können eine Hash-Map mit Feldname -> Wert in Ihrem Adapter oder Ihrer Aktivität speichern. Jedes Mal, wenn der Benutzer einen Wert in einem Feld ändert, aktualisieren Sie dieses Feld mit dem neuen Wert in der Hashmap. Wenn Sie Fertig drücken, können Sie über die Karte iterieren, um eine Liste aller Felder zu erhalten, die der Benutzer geändert hat, und die Werte, zu denen sie geändert wurden.

Um die Werte der Felder zu erhalten, wie der Benutzer sie ändert, verwenden Sie ein TextWatcher:

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

Sie, dass zu getChildView in Ihrem Adapter hinzufügen. Sie können myFieldName von der Position des übergeordneten und untergeordneten Elements ableiten.

+0

hey, aber wenn ich zwei gleiche Werte für verschiedene Edittext habe, als wie können wir herausfinden, welcher Positionswert für edittext geändert wird – Mahesh

+0

Sie müssen nur zwei verschiedene Schlüssel in Ihrer Map verwenden. Sie werden wahrscheinlich nicht zwei Texte für den gleichen Feldnamen bearbeiten.Wenn Sie dies tun, können Sie Ihre Karte immer auf Position setzen. –

Verwandte Themen