Wypełnianie ListView przy użyciu ArrayList?


109

Moja Androidaplikacja musi wypełnić ListViewdane z pliku ArrayList.

Mam z tym problem. Czy ktoś może mi pomóc z kodem?

Odpowiedzi:


228

Musisz to zrobić za pomocą narzędzia, ArrayAdapterktóre dostosuje twoją ArrayList (lub dowolną inną kolekcję) do twoich elementów w twoim układzie (ListView, Spinner itp.).

Oto, co mówi przewodnik dla programistów Androida :

A, ListAdapterktóra zarządza ListViewtablicą dowolnych obiektów. Domyślnie ta klasa oczekuje, że podany identyfikator zasobu odwołuje się do pojedynczego pliku TextView. Jeśli chcesz użyć bardziej złożonego układu, użyj konstruktorów, które również przyjmują identyfikator pola. Ten identyfikator pola powinien odnosić się do a TextVieww większym zasobie układu.

Jakkolwiek TextViewistnieje odwołanie, zostanie on wypełniony przez toString()każdy obiekt w tablicy. Możesz dodawać listy lub tablice obiektów niestandardowych. Zastąp toString()metodę obiektów, aby określić, jaki tekst będzie wyświetlany dla elementu na liście.

Aby użyć czegoś innego niż TextViewsna przykład do wyświetlania tablicy ImageViewslub aby niektóre dane oprócz toString()wyników wypełniały widoki, nadpisz, getView(int, View, ViewGroup)aby zwrócić żądany typ widoku.

Twój kod powinien wyglądać następująco:

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); 
    }
}

1
@ Amokrane Chentir: nie mogłem cię dostać ..... czy możesz wpisać pełny program .... dzięki
kAnNaN

1
@KanNaN: Jasne, czy możesz zobaczyć, czy moja zmiana jest dla ciebie bardziej wyraźna?
Amokrane Chentir

1
@ Amokrane Chentir: Myślę, że metoda „setContentView” musi zostać wywołana przed „findViewById”, bo inaczej nie zostanie znaleziony żaden ListView.
Petru

List <String> nie jest rozpoznawany. czemu? Używam Android Studio.
Ali.Rashidi


11

Wypróbuj poniższą odpowiedź, aby wypełnić widok listy za pomocą ArrayList

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");   
    }
}

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));
        }
    }

0

Oto przykład, jak można zaimplementować widok listy:

 @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));
        }
    });



}

Jeśli używasz Android Studio, po prostu automatycznie wypełni metodę onItemClick (). Teraz wszystko, co musisz zrobić, to dodać do niego funkcjonalność. W moim przypadku właśnie zarejestrowałem każdy element listy.
Syed Sadman
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.