ListView mit eigenem Layout erstellen

  • 3 Antworten
  • Letztes Antwortdatum
M

mCounter

Neues Mitglied
0
Hallöchen erstmal, ich möchte gleich vorneweg darauf hinweisen, dass ich noch ziemlich neu bin, was das Erstellen von Android-Apps angeht. Habt also bitte etwas Nachsicht mit mir. ^^

Also mein Problem besteht darin, dass ich gerne eine Listview erstellen möchte, welche mehrere Views pro Eintrag haben soll (z.B.: eine ImageView, zwei Textviews und einen Button).

Ich hab nun schon ein wenig gegooglet und auch schon einige Codes gefunden, allerdings waren das in den meisten Fällen immer nur Code-Fragmente, die dazu auch nur schlecht erklärt waren und durch die vielen unterschiedlichen Ansätze konnte ich das dann auch nicht wirklich zusammenfügen.

Ich hab aber immerhin schonmal so viel mitbekommen, dass ich ein neues Layout mit den gewünschten Views erstellen muss und dieses Layout dann mittels Adapter an die gewünschte ListView anbinden muss, aber wie genau dieser Teil mit dem Adapter dann auszusehen hat, dass weiß ich leider nicht.

Kennt vieleicht jemand irgend eine Seite, in der das verständlich erklärt wird? Oder kann es mir evtl. jemand von euch erklären (sofern das nicht zu viele Umstände macht)?

Schonmal dankeschön im Voraus.
 
OK, also ich bin jetzt schon so weit, dass ich mir eine Activity mit einer ListView erstellt habe, ein Layout für die Listview und mittels eines SimpleAdapter's einige Einträge zur ListView hinzufüge und das klappt auch alles wunderbar.

Nun habe ich noch einen OnItemClickListener hinzugefügt der mir einfach bloß mittels System.out.println im LogCat ausgeben soll, das ein Eintrag gewählt wurde. allerdings tut sich da nichts.

Hier mal meine Quellcodes dazu...

activity_contacts.xml:
Code:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context=".Contacts" >

    <Button
        android:id="@+id/button1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="Kontakt hinzufügen"/>

    <ListView
        android:id="@+id/listView1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content">
    </ListView>

</LinearLayout>
contacts_layout.xml:
Code:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/layout_lv"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_margin="2dp"
    android:clickable="true"
    android:orientation="horizontal" >
    
    <ImageView
        android:id="@+id/imageView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center_vertical|left"
        android:layout_marginRight="@dimen/activity_horizontal_margin"
        android:contentDescription="Avatar"
        android:src="@drawable/lock" />

    <LinearLayout
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:layout_weight="1"
        android:orientation="vertical" >

        <TextView
            android:id="@+id/list_name"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Hans-Peter"
            android:textAppearance="?android:attr/textAppearanceMedium" />

        <TextView
            android:id="@+id/list_id"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="ID: 3478534"
            android:textAppearance="?android:attr/textAppearanceSmall" />
    </LinearLayout>

    <Button
        android:id="@+id/button1"
        android:layout_width="100dp"
        android:layout_height="wrap_content"
        android:layout_gravity="center_vertical"
        android:text="Kontakt-Daten" />

</LinearLayout>
Contacts.java:
Code:
package com.example.tomate;

import java.util.ArrayList;
import java.util.HashMap;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ListView;
import android.widget.SimpleAdapter;

public class Contacts extends Activity {

    private ListView contactList;
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_contacts);
        
        contactList = (ListView)findViewById(R.id.listView1);
        
        ArrayList<HashMap<String, Object>> myList = new ArrayList<HashMap<String,Object>>();
        
        myList.add(addItem("Name", "Klaus-Dieter", "ID", "ID: 983456345"));
        myList.add(addItem("Name", "Hans-Peter", "ID", "ID: 35476556"));
        myList.add(addItem("Name", "Karl-Heinz", "ID", "ID: 34985743"));
        
        SimpleAdapter adapter = new SimpleAdapter(
                this,
                myList, 
                R.layout.contacts_layout,
                new String[]{"Name", "ID"}, 
                new int[]{R.id.list_name, R.id.list_id}
            );
    
        contactList.setAdapter(adapter);
        
        contactList.setOnItemClickListener(new OnItemClickListener() {

            @Override
            public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) {
                // TODO Auto-generated method stub
                System.out.println("ein Eintrag wurde gewählt");
            }
            
        });
        
    }
    
    public HashMap<String, Object> addItem(String key1, String value1, String key2, String value2){
        HashMap<String, Object> item = new HashMap<String, Object>();
        
        item.put(key1, value1);
        item.put(key2, value2);
        
        return item;
    }

}
Jetzt würde ich gerne wissen, warum der OnItemClickListener in der Contacts.java nicht funktioniert.
 
Hi,

ich kann Dir leider nicht sagen, wieso der ClickListener nicht funktioniert (sieht für mich eig. okay aus), aber empfehlen, es anders zu versuchen.
(evtl. liegt es daran, dass bei Dir folgendes:
Code:
private ListView contactList;
als "private" deklariert ist - evtl. das als "public" versuchen
)

Und zwar würde ich bei solchen Sachen das "OnItemClickListener" Interface in die Klasse einbinden. Beispiel:

Code:
public class Nachrichten_activity extends Activity implements
        OnItemClickListener {
Dadurch kannst Du deine Klasse selbst der ListView als "Beobachter" mitgeben.

Code:
contactList.setOnItemClickListener(this);
Nun musst Du in deiner Klasse einfach folgende Methode implementieren:

Code:
@Override
    public void onItemClick(AdapterView<?> parent, View view, int position,
            long id) { }
Vorteile dadruch sehe ich darin, dass man auf seine ganzen Klassenvariablen zugreifen kann. Ohne diese final etc. zu machen.
 
Schonmal danke für deine Antwort.

Ich hab das jetzt mal alles so gemacht, wie du's gesagt hast, dadurch, dass ich den OnItemClickListener jetzt impementiert habe wirkt das ganze auch etwas übersichtlicher ^^

Meine Listview habe ich nun auch public gemacht und um zu gucken, ob der Button aus der contacts_layout.xml evtl. die Klick's abfängt, habe ich ihn auch mal rausgenommen. Hat aber leider nichts geholfen, die Liste regiert immer noch nicht. (Wenn ich einen Eintrag auswähle, leuchtet er nicht mal auf)

Muss ich möglicherweise die contacts_layout.xml, welche ich als layout für meine Liste verwende noch im Manifest bekannt machen oder benötige ich vieleicht irgendwelche Permissions?

Edit:
Problem gelöst...
Ich habe in der contacts_layout.xml im 1. LinearLayout das Atrribut android:clickable="true" entfernt und jetzt funktionierts.
 
Zuletzt bearbeitet:

Ähnliche Themen

BerndFfm
Antworten
7
Aufrufe
939
swa00
swa00
K
Antworten
3
Aufrufe
701
mezzothunder
mezzothunder
J
Antworten
5
Aufrufe
667
swa00
swa00
B
Antworten
9
Aufrufe
458
jogimuc
J
Zurück
Oben Unten