Eine ListView mit einer ArrayList füllen?

109

Meine AndroidApp muss die ListViewmit den Daten aus einem füllen ArrayList.

Ich habe Probleme damit. Kann mir bitte jemand mit dem Code helfen?

kAnNaN
quelle

Antworten:

228

Sie müssen dies über eine tun, ArrayAdapterdie Ihre ArrayList (oder eine andere Sammlung) an Ihre Elemente in Ihrem Layout (ListView, Spinner usw.) anpasst.

Dies ist, was der Android-Entwicklerleitfaden sagt:

A ListAdapter, das ein ListViewvon einem Array beliebiger Objekte unterstütztes verwaltet. Standardmäßig erwartet diese Klasse, dass die angegebene Ressourcen-ID auf eine einzelne verweist TextView. Wenn Sie ein komplexeres Layout verwenden möchten, verwenden Sie die Konstruktoren, die auch eine Feld-ID verwenden. Diese Feld-ID sollte auf a TextViewin der größeren Layoutressource verweisen .

Unabhängig davon, auf TextViewwas verwiesen wird, wird es mit toString()jedem Objekt im Array gefüllt . Sie können Listen oder Arrays von benutzerdefinierten Objekten hinzufügen. Überschreiben Sie die toString()Methode Ihrer Objekte, um zu bestimmen, welcher Text für das Element in der Liste angezeigt wird.

Wenn Sie beispielsweise etwas anderes als TextViewsdie Array-Anzeige verwenden ImageViewsoder einige Daten neben den toString()Ergebnissen in die Ansichten einfügen getView(int, View, ViewGroup)möchten , überschreiben Sie diese , um den gewünschten Ansichtstyp zurückzugeben.

Ihr Code sollte also folgendermaßen aussehen:

public class YourActivity extends Activity {

    private ListView lv;

    public void onCreate(Bundle saveInstanceState) {
         setContentView(R.layout.your_layout);

         lv = (ListView) findViewById(R.id.your_list_view_id);

         // Instanciating an array list (you don't need to do this, 
         // you already have yours).
         List<String> your_array_list = new ArrayList<String>();
         your_array_list.add("foo");
         your_array_list.add("bar");

         // This is the array adapter, it takes the context of the activity as a 
         // first parameter, the type of list view as a second parameter and your 
         // array as a third parameter.
         ArrayAdapter<String> arrayAdapter = new ArrayAdapter<String>(
                 this, 
                 android.R.layout.simple_list_item_1,
                 your_array_list );

         lv.setAdapter(arrayAdapter); 
    }
}
Amokrane Chentir
quelle
1
@ Amokrane Chentir: Ich konnte dich nicht bekommen ..... kannst du bitte das vollständige Programm
eingeben
1
@KanNaN: Sicher, können Sie sehen, ob meine Bearbeitung für Sie expliziter ist?
Amokrane Chentir
1
@ Amokrane Chentir: Ich denke, dass die "setContentView" -Methode vor "findViewById" aufgerufen werden muss, sonst wird keine ListView gefunden.
Petru
Liste <String> wird nicht erkannt. Warum? Ich benutze Android Studio.
Ali.Rashidi
14

Lernprogramm

Suchen Sie auch nach der ArrayAdapter- Schnittstelle:

ArrayAdapter(Context context, int textViewResourceId, List<T> objects)
Sanjit Saluja
quelle
11

Versuchen Sie die folgende Antwort, um die Listenansicht mit ArrayList zu füllen

public class ExampleActivity extends Activity
{
    ArrayList<String> movies;

    public void onCreate(Bundle saveInstanceState)
    {
       super.onCreate(saveInstanceState);
       setContentView(R.layout.list);

       // Get the reference of movies
       ListView moviesList=(ListView)findViewById(R.id.listview);

       movies = new ArrayList<String>();
       getMovies();

       // Create The Adapter with passing ArrayList as 3rd parameter
       ArrayAdapter<String> arrayAdapter =      
                 new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1, movies);
       // Set The Adapter
       moviesList.setAdapter(arrayAdapter); 

       // register onClickListener to handle click events on each item
       moviesList.setOnItemClickListener(new OnItemClickListener()
       {
           // argument position gives the index of item which is clicked
           public void onItemClick(AdapterView<?> arg0, View v,int position, long arg3)
           {
               String selectedmovie=movies.get(position);
               Toast.makeText(getApplicationContext(), "Movie Selected : "+selectedmovie,   Toast.LENGTH_LONG).show();
           }
        });
    }

    void getmovies()
    {
        movies.add("X-Men");
        movies.add("IRONMAN");
        movies.add("SPIDY");
        movies.add("NARNIA");
        movies.add("LIONKING");
        movies.add("AVENGERS");   
    }
}
KarthikKPN
quelle
2
public class Example extends Activity
{
    private ListView lv;
    ArrayList<String> arrlist=new ArrayList<String>();
    //let me assume that you are putting the values in this arraylist
    //Now convert your arraylist to array

    //You will get an exmaple here

    //http://www.java-tips.org/java-se-tips/java.lang/how-to-convert-an-arraylist-into-an-array.html 

    private String arr[]=convert(arrlist);
    @Override
    public void onCreate(Bundle bun)
    {
        super.onCreate(bun);
        setContentView(R.layout.main);
        lv=(ListView)findViewById(R.id.lv);
        lv.setAdapter(new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1 , arr));
        }
    }
Tanmay Mandal
quelle
0

Hier ist ein Beispiel, wie Sie eine Listenansicht implementieren können:

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

    //We have our list view
    final ListView dynamic = findViewById(R.id.dynamic);

    //Create an array of elements
    final ArrayList<String> classes = new ArrayList<>();
    classes.add("Data Structures");
    classes.add("Assembly Language");
    classes.add("Calculus 3");
    classes.add("Switching Systems");
    classes.add("Analysis Tools");

    //Create adapter for ArrayList
    final ArrayAdapter<String> adapter = new ArrayAdapter<>(this,android.R.layout.simple_list_item_1, classes);

    //Insert Adapter into List
    dynamic.setAdapter(adapter);

    //set click functionality for each list item
    dynamic.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
            Log.i("User clicked ", classes.get(position));
        }
    });



}
Syed Sadman
quelle
Wenn Sie Android Studio verwenden, wird die onItemClick () -Methode nur automatisch ausgefüllt. Jetzt müssen Sie nur noch Funktionen hinzufügen. Für meinen Fall habe ich nur jedes Element der Liste protokolliert.
Syed Sadman