EditText in ListView

  • 3 Antworten
  • Letztes Antwortdatum
E

erdalprinz

Neues Mitglied
0
Hallo ich würde gerne einige EditText Felder in einer ListView darstellen. Aber irgendwie klappt das noch nicht so wie ich es gerne hätte und die App stürzt ab. Log-Cat meldet eine NullPointerException mit folgender Begründung:

"at android.widget.ArrayAdapter.createViewFromResource(ArrayAdapter.java:355)"


Ich weiß leider nicht, was die Exception bedeuten soll bzw. wo mein Fehler im Code ist. :blushing:


Eventuell hilft mir auch schon Link, wo ich mich besser einlesen kann, da ich selbst nicht wirklich das Passende zu meinem Problem gefunden hab.

Vielen Dank im Vorraus.

CreateTeamsActivity:
Code:
public class CreateTeamsActivity extends Activity {

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

        createEditTextFields();

    }

    // private TableDatasource tableDatasource;

    private void createEditTextFields() {
        /** Mannschaftsanzahl holen */
        Intent intent = getIntent();
        int mannschaftsanzahl = intent.getIntExtra("mannschaftsanzahl", 0);
 
        /** ListView mit EditTextFeldern befüllen */
        List<EditText> editTextitems = new ArrayList<EditText>();

        for (int i = 0; i < mannschaftsanzahl; i++) {
            editTextitems.add((EditText) findViewById(R.id.mannschaft));
        }

        ArrayAdapter<EditText> adapt = new ArrayAdapter<EditText>(
                CreateTeamsActivity.this, R.layout.create_teams_item,
                editTextitems);

        ListView createTeamsList = (ListView) findViewById(R.id.ListView_Create_Teams);
        createTeamsList.setAdapter(adapt);
    }
}
create_teams.xml
Code:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    tools:context=".CreateTeamsActivity" >

    <ListView
        android:id="@+id/ListView_Create_Teams"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_gravity="center" >
    </ListView>

</LinearLayout>
create_teams_item.xml
Code:
<?xml version="1.0" encoding="utf-8"?>
<EditText xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:layout_gravity="center_horizontal"
    android:gravity="center"
    android:id="@+id/mannschaft" >

</EditText>
 
schonmal geschaut ob was in editTextitems drin ist? und dein adapt scheint auch nicht wirklich zu laufen ...
 
Ja, die Liste editTextItems wird korrekt befüllt. Hab ich im Log-Cat nachgeschaut.
 
Zuletzt bearbeitet:
Okay nach langem googlen und ausprobieren, habe ich endlich die Lösung gefunden :)

Nach einem Blick in die Android-Dokumentation (sollte vielleicht doch immer der erste Schritt sein :blushing: ) zum Thema ArrayAdapter fiel mir folgender Satz ins Auge:

To use something other than TextViews for the array display, for instance, ImageViews, or to have some of data besides toString() results fill the views, override getView(int, View, ViewGroup) to return the type of view you want
Nachdem ich dann hin und her gegooglet habe, stieß ich auf folgenden Beitrag hier im Forum:

https://www.android-hilfe.de/forum/...xtelemente-einer-listview-aendern.145703.html

Mit der hier beschriebenen Methode zur Überschreibung der getView-Methode ist es mir gelungen mein gewünschtes Ergebnis zu erreichen.
Vielleicht kann ich ja damit dem ein oder anderen, der ein ähnliches Problem hat, weiter helfen ;-)

Hier noch mein dazugehöriger Code:

CreateTeamsActivity.java
Code:
public class CreateTeamsActivity extends Activity {

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

        createEditTextFields();

    }

    private void createEditTextFields() {
        /** Mannschaftsanzahl holen */
        Intent intent = getIntent();
        int mannschaftsanzahl = intent.getIntExtra("mannschaftsanzahl", 0);

        /** ListView mit EditTextFeldern befüllen */
        ArrayList<EditText> editTextItems = new ArrayList<EditText>();
        for (int i = 0; i < mannschaftsanzahl; i++) {
            editTextItems.add((EditText) findViewById(R.id.mannschaft));
        }
        
        EditTextArrayAdapter adapt = new EditTextArrayAdapter(this, R.layout.create_teams_item, editTextItems);

        ListView createTeamsList = (ListView) findViewById(R.id.ListView_Create_Teams);
        createTeamsList.setAdapter(adapt);
    }
}
EditTextArrayAdapter.java
Code:
public class EditTextArrayAdapter extends ArrayAdapter<EditText> {

    int resource;
    private LinearLayout editTextItemView;
    
    public EditTextArrayAdapter(Activity context, int editTextResourceId,
            ArrayList<EditText> objects) {
        super(context, editTextResourceId, objects);
        this.resource = editTextResourceId;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent){
        View v = convertView;
    
        EditText editText = getItem(position);
        
        if(v == null){
            editTextItemView = new LinearLayout(getContext());
            LayoutInflater vi = (LayoutInflater)getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            vi.inflate(resource, editTextItemView, true);
        }
        else{
            editTextItemView = (LinearLayout)v;
        }
        
        if(editText != null){
            editText = (EditText) v.findViewById(R.id.mannschaft);
        }
        return editTextItemView;
    }
}
 
Zurück
Oben Unten