ExpandableListView mit EditText

  • Antworten:0
  • OffenNicht stickyNicht beantwortet
  • Forum-Beiträge: 1

16.09.2016 11:05:30 via Website

Hallo Zusammen,

kurz zu mir, mein Name ist Torsten und ich bin 29 Jahre alt. Ich bearbeite derzeit meine Bachelorarbeit und schreibe eine Android Aquarium App.

Nun stehe ich vor folgendem Problem.

Ich habe eine ExpandableListView welche ich dynamisch erstellen lassen. Darf leider noch kein Bild posten da neues Mitglied. :/

Nun habe ich eigentlich 2 Probleme:

  1. Die Edit-Textfelder haben die selbe "ID" und daher dupliziert er meine Einträge. Sprich, wenn ich etwas in der ersten Gruppe in einem Textfeld eintrage, steht dieser Text auch in den anderen Textfeldern drin. Nicht immer im ersten, mal auch im letzten!

  2. Ich würde gerne die Einträge aus den Textfeldern auslesen, finde aber keine Möglichkeit und habe auch bereits diverse Threads seit 2 Tagen durchsucht, aber alle Lösungen funktionieren nicht für mich.

Alle weiteren wichtigen Klassen sehen wie folgt aus:

MainActivity:

  1. createData();
    ExpandableListView listView = (ExpandableListView) findViewById(R.id.listView);
    MyExpandableListAdapter adapter = new MyExpandableListAdapter(this,
    groups);
    adapter.arrTemp = new String[groups.size()];
    listView.setAdapter(adapter);

    /**

    • Fill the ListView with Nutrient Elements (dynamic)
      */
      private void createData() {
      for (Nutrient nutrient : Nutrient.values()) {
      EditText minValue = new EditText(getApplicationContext());
      EditText maxValue = new EditText(getApplicationContext());
      Group group = new Group(nutrient, minValue, maxValue);
      for (AnalyticalSeverity severity : AnalyticalSeverity.values()) {
      group.getChildren().add(severity);
      }
      groups.append(nutrient.ordinal(), group);
      }
      }`

Die XML Files:

<TextView
    android:id="@+id/textView1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:drawableLeft="@drawable/ic_launcher"
    android:drawablePadding="5dp"
    android:gravity="center_vertical"
    android:text="@string/activity_create_severity.name"
    android:textSize="14sp"
    android:textStyle="bold"></TextView>

<EditText
    android:id="@+id/minValue"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_marginLeft="0dip"
    android:layout_weight="1"
    android:hint="@string/activity_create_severity.hint_minValue"
    android:inputType="numberDecimal"
    android:saveEnabled="false"/>

<EditText
    android:id="@+id/maxValue"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_marginLeft="0dip"
    android:layout_weight="1"
    android:hint="@string/activity_create_severity.hint_maxValue"
    android:inputType="numberDecimal"
    android:saveEnabled="false"/>

<!--<View-->
    <!--android:layout_width="match_parent"-->
    <!--android:layout_height="1dp"-->
    <!--android:background="@android:color/black" />-->

Und nun der Adapter, welchen ich schon mehrfach auf den Kopf gestellt habe:

package com.w3l.project.aquacalc.helper.Adapter;

import android.app.Activity;
import android.text.Editable;
import android.text.TextWatcher;
import android.util.SparseArray;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseExpandableListAdapter;
import android.widget.CheckedTextView;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;

import com.w3l.project.aquacalc.R;
import com.w3l.project.aquacalc.helper.Group;

/**
* Created by di3tr on 14.09.2016.
*/
public class MyExpandableListAdapter extends BaseExpandableListAdapter {

private final SparseArray<Group> groups;
public LayoutInflater inflater;
public Activity activity;
public String[] arrTemp;

private String minValue = null;
private String maxValue = null;

public MyExpandableListAdapter(Activity act, SparseArray<Group> groups) {
    activity = act;
    this.groups = groups;
    inflater = act.getLayoutInflater();
}

@Override
public Object getChild(int groupPosition, int childPosition) {
    return groups.get(groupPosition).getChildren().get(childPosition);
}

@Override
public long getChildId(int groupPosition, int childPosition) {
    return 0;
}

@Override
public View getChildView(int groupPosition, final int childPosition,
                         boolean isLastChild, View convertView, ViewGroup parent) {
    final Enum children = (Enum) getChild(groupPosition, childPosition);
    TextView text = null;
    final ChildHolder holder;

    if (convertView == null) {
        holder = new ChildHolder();
        convertView = inflater.inflate(R.layout.listrow_details, null);
        holder.minValue = (EditText) convertView.findViewById(R.id.minValue);
        holder.maxValue = (EditText) convertView.findViewById(R.id.maxValue);
        convertView.setTag(holder);
    } else{
        holder = (ChildHolder) convertView.getTag();
    }

    holder.ref = childPosition;

    text = (TextView) convertView.findViewById(R.id.textView1);

// holder.minValue.setText(groups.get(groupPosition).toString());
holder.minValue.addTextChangedListener(new TextWatcher() {

        @Override
        public void onTextChanged(CharSequence arg0, int arg1, int arg2, int arg3) {
            // TODO Auto-generated method stub
        }

        @Override
        public void beforeTextChanged(CharSequence arg0, int arg1, int arg2,
                                      int arg3) {
            // TODO Auto-generated method stub
        }

        @Override
        public void afterTextChanged(Editable arg0) {
            // TODO Auto-generated method stub
            arrTemp[holder.ref] = arg0.toString();
        }
    });

    text.setText(children.toString());
    convertView.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Toast.makeText(activity, children.toString(),
                    Toast.LENGTH_SHORT).show();
        }
    });
    return convertView;
}

@Override
public int getChildrenCount(int groupPosition) {
    return groups.get(groupPosition).getChildren().size();
}

@Override
public Object getGroup(int groupPosition) {
    return groups.get(groupPosition);
}

public SparseArray<Group> getGroups() {
    return groups;
}

@Override
public int getGroupCount() {
    return groups.size();
}

@Override
public void onGroupCollapsed(int groupPosition) {
    super.onGroupCollapsed(groupPosition);
}

@Override
public void onGroupExpanded(int groupPosition) {
    super.onGroupExpanded(groupPosition);
}

@Override
public long getGroupId(int groupPosition) {
    return groupPosition;
}

@Override
public View getGroupView(int groupPosition, boolean isExpanded,
                         View convertView, ViewGroup parent) {
    if (convertView == null) {
        convertView = inflater.inflate(R.layout.listrow_group, null);
    }
    Group group = (Group) getGroup(groupPosition);
    ((CheckedTextView) convertView).setText(group.getEnumValue().toString());
    ((CheckedTextView) convertView).setChecked(isExpanded);
    return convertView;
}

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

@Override
public boolean isChildSelectable(int groupPosition, int childPosition) {
    return false;
}

static class ChildHolder{
    EditText minValue;
    EditText maxValue;
    int ref;
}

}

Und die Manifest Änderungen:

 <activity
        android:name=".activity.create.CreateSeverityActivity"
        android:descendantFocusability="afterDescendants"
        android:screenOrientation="portrait"
        android:windowSoftInputMode="adjustPan" />

Hat jemand eine Lösung um mein Problem zu beheben. Vielen Dank bereits im Vornherein.