My Android
приложение должно заполнить ListView
, используя данные из ArrayList
.
У меня проблемы с этим. Может кто-нибудь, пожалуйста, помогите мне с кодом?
My Android
приложение должно заполнить ListView
, используя данные из ArrayList
.
У меня проблемы с этим. Может кто-нибудь, пожалуйста, помогите мне с кодом?
Вам нужно сделать это через 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);
}
}
Шаг за шагом tutorial
Также посмотрите ArrayAdapter интерфейс:
ArrayAdapter(Context context, int textViewResourceId, List<T> objects)
Попробуйте ответить ниже, чтобы заполнить список, используя 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");
}
}
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));
}
}