Населення ListView за допомогою ArrayList?


109

У моєму Androidдодатку потрібно заповнити дані, ListViewкористуючись даними ArrayList.

У мене проблеми з цим. Може хтось, будь ласка, допоможе мені з кодом?

Відповіді:


228

Вам потрібно зробити це за допомогою ArrayAdapterякого буде адаптувати ваш ArrayList (або будь-яку іншу колекцію) до ваших елементів у вашому макеті (ListView, Spinner тощо).

Про це говорить посібник для розробників Android :

A, ListAdapterщо управляє ListViewрезервним масивом довільних об'єктів. За замовчуванням цей клас очікує, що наданий ідентифікатор ресурсу посилається на єдиний TextView. Якщо ви хочете використовувати більш складний макет, використовуйте конструктори, які також приймають ідентифікатор поля. Цей ідентифікатор поля повинен містити посилання TextViewна більший ресурс макета.

Однак на TextViewпосилання, воно буде заповнене toString()кожним об'єктом в масиві. Ви можете додавати списки або масиви користувацьких об'єктів. Замініть toString()метод своїх об’єктів, щоб визначити, який текст буде відображатися для елемента в списку.

TextViewsНаприклад ImageViews, щоб використовувати щось інше, ніж для відображення масиву , або мати деякі дані, крім toString()результатів, заповнювати представлення даних, замінити, getView(int, View, ViewGroup)щоб повернути потрібний тип перегляду.

Отже, ваш код повинен виглядати так:

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: я не міг отримати вас ..... можна u pls ввести повну програму .... дякую
kAnNaN

1
@KanNaN: Звичайно, чи можете ви бачити, чи моє редагування явніше для вас?
Amokrane Chentir

1
@ Amokrane Chentir: Я думаю, що метод "setContentView" потрібно викликати перед "findViewById", інакше ListView не буде знайдено.
Петру

Список <String> не розпізнається чому? Я використовую студію Android.
Алі.Рашиді


11

Спробуйте відповісти нижче, щоб заповнити список перегляду за допомогою 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

Ось приклад того, як можна реалізувати перегляд списку:

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



}

Якщо ви використовуєте Android Studio, він просто заповнить метод onItemClick (). Тепер все, що вам потрібно зробити, - це просто додати в нього функціонал. У моєму випадку я просто записав кожен елемент списку.
Сид Садман
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.