Заполнение ListView с использованием ArrayList? - PullRequest
101 голосов
/ 21 февраля 2011

Мое Android приложение должно заполнить ListView, используя данные из ArrayList.

У меня проблемы с этим. Может кто-нибудь помочь мне с кодом?

Ответы [ 5 ]

217 голосов
/ 21 февраля 2011

Вам необходимо сделать это через 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); 
    }
}
13 голосов
/ 21 февраля 2011

учебник

Также посмотрите ArrayAdapter интерфейс:

ArrayAdapter(Context context, int textViewResourceId, List<T> objects)
8 голосов
/ 19 июля 2016

Попробуйте приведенный ниже ответ для заполнения списка с помощью 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 голосов
/ 21 февраля 2011
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 голосов
/ 14 января 2019

Вот пример того, как вы могли бы реализовать представление списка:

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



}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...