Listview Übergabe Werte an zweite Activity

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Listview Übergabe Werte an zweite Activity

    Hallo,

    ich habe auf meiner Main-Activitiy eine Liste. Jedes Listenelement wird über eine separate list_item.xml "designt".
    Zur Identifikation von Einträgen möchte ich eine eindeutige ID benutzen, um mehr Daten zu dem Eintrag in der zweiten Activity "nachzuladen", aber NICHT alle Daten schon on das Listenelement packen.
    Die Daten werden beim Parsen des JSON-Feeds in einer HashMap abgelegt. (Beispiel aus Internet)

    Fragen:
    Kann ich auf die Daten der HashMap auch in der zweiten Activty zugreifen?
    Wie kann ich anhand der position des Elements in der Liste alle Daten aus der HashMap an die zweite Activity übergeben?

    main_activity.xml

    Quellcode

    1. <LinearLayout
    2. xmlns:android="http://schemas.android.com/apk/res/android"
    3. xmlns:tools="http://schemas.android.com/tools"
    4. android:layout_width="fill_parent"
    5. android:layout_height="fill_parent"
    6. android:orientation="vertical" >
    7. <ListView android:id="@android:id/list"
    8. android:layout_width="fill_parent"
    9. android:layout_height="wrap_content"/>
    10. </LinearLayout>
    Alles anzeigen



    list_item.xml

    Quellcode

    1. <LinearLayout
    2. xmlns:android="http://schemas.android.com/apk/res/android"
    3. android:orientation="vertical"
    4. android:layout_width="match_parent"
    5. android:layout_height="match_parent">
    6. <TextView android:id="@+id/evId"
    7. android:layout_width="fill_parent"
    8. android:layout_height="wrap_content"
    9. android:visibility="invisible" />
    10. <TextView
    11. android:id="@+id/evTitle"
    12. android:layout_width="wrap_content"
    13. android:layout_height="wrap_content" />
    14. </LinearLayout>
    Alles anzeigen


    detail_activity.xml

    Quellcode

    1. <TextView android:id="@+id/evId"
    2. android:layout_width="fill_parent"
    3. android:layout_height="wrap_content"
    4. android:visibility="invisible" />
    5. <TextView
    6. android:id="@+id/evTitle"
    7. android:layout_width="wrap_content"
    8. android:layout_height="wrap_content" />
    9. <TextView android:id="@+id/evCategory"
    10. android:layout_width="fill_parent"
    11. android:layout_height="wrap_content" />
    12. <TextView
    13. android:id="@+id/evDestination"
    14. android:layout_width="wrap_content"
    15. android:layout_height="wrap_content" />
    Alles anzeigen


    Lesen der Einträge aus JSON-Feed

    Quellcode

    1. /**
    2. * Async task class to get json by making HTTP call
    3. * */
    4. [b]private class GetEvents[/b] extends AsyncTask<Void, Void, Void> {
    5. @Override
    6. protected Void doInBackground(Void... arg0) {
    7. ... hier http-request ....
    8. events = jsonObj.getJSONArray(TAG_ITEMS);
    9. // looping through All Events
    10. for (int i = 0; i < events.length(); i++) {
    11. JSONObject c = events.getJSONObject(i);
    12. String id = c.getString(TAG_ID);
    13. String title = c.getString(TAG_TITLE);
    14. String ort = c.getString(TAG_ORT);
    15. String zip = c.getString(TAG_CATEGORY);
    16. HashMap<String, String> event = new HashMap<String, String>();
    17. event.put(TAG_ID, id);
    18. event.put(TAG_TITLE, title);
    19. event.put(TAG_ORT, ort);
    20. event.put(TAG_ZIP, zip);
    21. eventList.add(event);
    22. }
    23. }
    24. }
    Alles anzeigen

    ListAdapter füllen

    Quellcode

    1. @Override
    2. protected void onPostExecute(Void result) {
    3. /**
    4. * Updating parsed JSON data into ListView
    5. * */
    6. ListAdapter adapter = new SimpleAdapter(
    7. MainActivity.this, eventList,
    8. R.layout.list_item, new String[] { TAG_ID, TAG_TITLE, TAG_ZIP,
    9. TAG_ORT, TAG_STREET, TAG_NUMBER, TAG_DATE, TAG_STIME, TAG_ETIME, TAG_CATEGORY_NAME }, new int[] { R.id.evId, R.id.evTitle,
    10. R.id.evZIP, R.id.evOrt, R.id.evStreet, R.id.evNumber, R.id.evDate, R.id.evStartTime, R.id.evEndTime, R.id.evCategory });
    11. setListAdapter(adapter);
    12. }
    Alles anzeigen



    Quellcode

    1. protected void onCreate(Bundle savedInstanceState) {
    2. super.onCreate(savedInstanceState);
    3. setContentView(R.layout.activity_main);
    4. eventList = new ArrayList<HashMap<String, String>>();
    5. ListView lv = getListView();
    6. // Listview on item click listener
    7. lv.setOnItemClickListener(new AdapterView.OnItemClickListener() {
    8. @Override
    9. public void onItemClick(AdapterView<?> parent, View view, int position, long id)
    10. {
    11. // getting values from selected ListItem
    12. String evTitle = ((TextView) view.findViewById(R.id.evTitle)).getText().toString();
    13. String evZIP = ((TextView) view.findViewById(R.id.evZIP)).getText().toString();
    14. String evOrt = ((TextView) view.findViewById(R.id.evOrt)).getText().toString();
    15. String evCategory = ((TextView) view.findViewById(R.id.evCategory)).getText().toString();
    16. // Starting single contact activity
    17. Intent in = new Intent(getApplicationContext(),DisplayEventDetailActivity.class);
    18. in.putExtra(TAG_TITLE, evTitle);
    19. in.putExtra(TAG_ORT, evOrt);
    20. in.putExtra(TAG_ZIP, evZIP);
    21. in.putExtra(TAG_CATEGORY_NAME, evCategory);
    22. startActivity(in);
    23. }
    24. });
    25. // Calling async task to get json
    26. new GetEvents().execute();
    27. }
    Alles anzeigen
  • 1) Nein.
    2) Gar nicht.

    Android/Java arbeitet an dieser Stelle nicht mit Referenzen sondern mit Kopien.
    Die HashMap oder deren Inhalte zu kopieren wäre ein systematischer Selbstmord.

    Statt die HashMap im Speicher zu halten gehört die lokal gespeichert (beispielsweise in eine SQLite Datenbank) und dann in den betreffenden Activities/Fragments ausgelesen.
    Zu diesem Zweck kannst du via Intent.putExtra() Deine ID des gewählten Eintrags an die zweite Activity übergeben, welche diese ID zum gefilterten Laden der Daten verwendet.
    Je mehr Käse, desto mehr Löcher.
    Je mehr Löcher, desto weniger Käse.
    Daraus folgt: je mehr Käse, desto weniger Käse.

    »Dies ist ein Forum. Schreibt Eure Fragen in das Forum, nicht per PN!«