Android

Populating a ListView using an ArrayList?

Заполнение ListView с помощью ArrayList?

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

У меня возникли проблемы с этим. Кто-нибудь, пожалуйста, может помочь мне с кодом?

Переведено автоматически
Ответ 1

Вам нужно сделать это через ArrayAdapter который адаптирует ваш ArrayList (или любую другую коллекцию) к вашим элементам в вашем макете (ListView, Spinner и т.д.).

Это то, что говорится в руководстве для разработчиков Android:


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);
}
}
Ответ 2

Учебник

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

ArrayAdapter(Context context, int textViewResourceId, List<T> objects)
Ответ 3

Попробуйте приведенный ниже ответ, чтобы заполнить listview с помощью 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");
}
}
Ответ 4
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));
}
}
java android listview arraylist