ListView dynamisch mit StringArray füllen

  • Antworten:2
Alexej D.
  • Forum-Beiträge: 10

30.01.2014, 20:43:20 via Website

Hallo zusammen,

ich bin noch ein ziemlicher Änfänger im programmieren. Dank des Forums habe ich aber schon einiges geschafft. Seit ein paar Tagen komme ich aber leider nicht mehr weiter und hoffe das ihr mir helfen könnt.

Ich möchte eine Liste aus einem Array erzeugen und wenn ein Element davon angeklickt wird, soll in einer neuen Activity wieder eine Liste erstellt werden. (das läuft auch soweit)
1public class altemainActivity extends ListActivity {
2 @Override
3 public void onCreate(Bundle savedInstanceState) {
4 super.onCreate(savedInstanceState);
5
6 // storing string resources into Array
7 String[] ersteStringArray = getResources().getStringArray(R.array.ersteListe);
8
9 // Binding resources Array to ListAdapter
10 this.setListAdapter(new ArrayAdapter<String>(this, R.layout.list_item, R.id.label, ersteStringArray));
11 ListView lv = getListView();
12
13 // listening to single list item on click
14 lv.setOnItemClickListener(new OnItemClickListener() {
15 public void onItemClick(AdapterView<?> parent, View view,
16 int position, long id) {
17
18 // selected item
19 String product = ((TextView) view).getText().toString();
20
21 // Launching new Activity on selecting single List Item
22
23
24
25 Intent i = new Intent(getApplicationContext(), ZweiteListe.class);
26 // sending data to new activity
27 i.putExtra("product", product);
28 startActivity(i);
29
30
31 }
32 });
33 }

Die Klasse ZweiteListe besteht im wesentlichen auch wieder aus dem selben Code wie oben.
Nun möchte ich aber dass die neue Liste kein statisches Array aus meiner value/list_data.xml zugewiesen bekommt, sondern ich möchte, dass das Array zum Füllen der ListView in Abhängigkeit des geklickten Elementes ausgewählt wird.

Bsp: ich habe in der list_data.xml das Array:
erste_liste mit den items: Buch, Film, Musik, Comic
Buch mit den items: Mathe, Deutsch, Physik
Film mit den items: Komödie, Thriller, ...
Comic ...

Mit der MainActivity wird die ListView mit "erste_liste" also Buch, Film, Musik, Comic gefüllt
klicke ich jetzt z.B. auf Film, soll Komödie, Thriller, .. ausgegeben werden
hätte ich auf Buch geklickt, sollte Mathe, Deutsch, Physik ausgegeben werden.

Ich könnte natürlich eine eigene Klasse für Buch, Film und Comic anlegen aber da noch weitere Arrays folgen sollen, wird es sicher auf Dauer unübersichtlich.

Ich hoffe ich habe es einigermaßen verständlich erklärt :-)

Antworten
impjor
  • Forum-Beiträge: 1.793

30.01.2014, 21:50:41 via App

Das sieht doch schon ganz gut aus. Als erstes würde ich der neuen Activity nicht (nur) den Text des TextViews übergeben, sondern auch die Position des geklickten Item. In der Zweiten Activity dann einfach ein (statisches) Int-Array mit private static int[] listen ={R.array.buecher, R.array.file, ...}
Dann kannst du einfach der Liste jetzt statt R.array.ersteListe listen[position] zuweisen.

LG

Liebe Grüße impjor.

Für ein gutes Miteinander: Unsere Regeln
Apps für jeden Einsatzzweck
Stellt eure App vor!

Antworten
Alexej D.
  • Forum-Beiträge: 10

31.01.2014, 15:00:32 via Website

Vielen, vielen Dank impjor. :)
Das war eine super Idee! Es läuft jetzt.

Da ich als ForumLeser immer sehr interessiert an den Quellcode bin hier meine Lösung:

nicht (nur) den Text des TextViews übergeben, sondern auch die Position des geklickten Item. :
1i.putExtra("position", position);

In der Zweiten Activity dann einfach ein (statisches) Int-Array mit private static int[] listen ={R.array.buecher, R.array.file, ...}
:
1private static int[]listenAuswahl ={R.array.buch, R.film};

Dann kannst du einfach der Liste jetzt statt R.array.ersteListe listen[position] zuweisen.:
1Intent i = getIntent();
2 // getting attached intent data
3 String product = i.getStringExtra("product");
4 int defaultWert= 0; //der Wert der als Standard gesetzt werden soll, wenn kein geeigneter Wert aus der 1. Activity übergeben wurde
5 int pos = i.getIntExtra("position", position);
und
1// Binding resources Array to ListAdapter
2this.setListAdapter(new ArrayAdapter<String>(this, R.layout.list_item, R.id.label,listenAuswahl[pos]));
3ListView lv = getListView();

— geändert am 31.01.2014, 15:05:24

Antworten