Хорошо, чтобы лучше понять, как реализовать пользовательский ListView, я советую вам проверить это tutorial. Теперь, ища вашу проблему. Первая проблема возникает из-за того, что вы используете ArrayAdapter для создания динамического списка. Взгляните на это объяснение, извлеченное из учебника.
Вход для ArrayAdapter Класс ArrayAdapter может обрабатывать любой объект Java в качестве входных данных. Он отображает данные этого ввода в TextView в макете. Вы можете определить его в конструкторе, иначе будет использоваться идентификатор android.R.id.text1.
ArrayAdapter использует метод toString() объекта ввода данных для определения строки, которая должна отображаться.
добавлять и удалять данные Класс ArrayAdapter позволяет удалить все элементы в его основной структуры данных с четким() вызова метода. Затем вы можете добавлять новые элементы с помощью метода add() или коллекции через метод addAll().
Вы также можете напрямую изменить базовую структуру данных и вызвать метод notifyDataSetChanged() на адаптере, чтобы уведомить его об изменениях в данных.
Предупреждение Если вы хотите изменить данные в своем адаптере, базовая структура данных должна поддерживать эту операцию. Это, например, случай для класса ArrayList, но не для массивов.
Итак, ваша первая проблема заключается в том, что вы меняете/заполняете свой массив после установки его на свой адаптер. Вы должны это изменить.
Оставьте значок на каждой строке. Для этого вы должны написать собственный адаптер. Например, вы можете расширить пользовательский адаптер для этого.
Опять же, извлечено из учебника.
Разработка пользовательского адаптера Чтобы контролировать назначение данных и поддерживать это задание нескольким Views, вы создаете свою собственную реализацию адаптера. Для этого вы должны расширить существующие реализации адаптеров или подклассифицировать класс BaseAdapter напрямую.
ListView вызывает метод getView() для адаптера для каждого элемента данных. В этом методе адаптер определяет макет строки и как данные сопоставляются с представлениями в этом макете.
Этот корень макета, как правило, представляет собой ViewGroup (LayoutManager) и содержит несколько других представлений, например. ImageView и TextView.
Итак, приведенный ниже код реализует пользовательский listView. На каждой строке у нас есть два текста и значок. Посмотрите (Вы можете ße полный пример here(Example CustomListView)):
Результат:
list_layout.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
<ListView android:id="@android:id/list" android:layout_width="match_parent"
android:layout_height="match_parent" android:background="#EEEEEE"/>
<TextView android:id="@android:id/empty" android:layout_width="match_parent"
android:layout_height="wrap_content" android:background="#0000FF"
android:text="@string/list_is_empty"/>
</LinearLayout>
two_line_icon.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="match_parent">
<ImageView android:id="@+id/icon" android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
>
<TextView android:id="@+id/text1" android:layout_width="match_parent"
android:layout_height="wrap_content" android:text="Texto 1"/>
<TextView android:id="@+id/text2" android:layout_width="match_parent"
android:layout_height="wrap_content" android:text="Descricao"/>
</LinearLayout>
</LinearLayout>
ListWithIcon. java
public class ListWithIcon extends ListActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.list_layout);
String[] dados = {"Item 1", "Item 2", "Item 3",
"Item 4", "Item 5", "Item 6", "Item 7"};
String[] dados2 = {"desc 1", "desc 2", "desc 3",
"desc 4", "desc 5", "desc 6", "desc 7"};
MyAdapter myAdapter = new MyAdapter(this, dados, dados2);
setListAdapter(myAdapter);
}
@Override
protected void onListItemClick(ListView l, View v, int position, long id) {
super.onListItemClick(l, v, position, id);
Toast.makeText(this, l.getItemAtPosition(position).toString(),
Toast.LENGTH_SHORT).show();
}
}
MyAdapter.java
public class MyAdapter extends BaseAdapter {
private String[] data;
private String[] data2;
private Context context;
public MyAdapter(Context context, String[] data1, String[] data2) {
super();
this.data = data1;
this.data2 = data2;
this.context = context;
}
@Override
public int getCount() {
return data.length;
}
@Override
public Object getItem(int position) {
return data[position];
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View rowView = LayoutInflater.from(context).
inflate(R.layout.two_line_icon, parent, false);
TextView text1 = (TextView) rowView.findViewById(R.id.text1);
TextView text2 = (TextView) rowView.findViewById(R.id.text2);
ImageView icon = (ImageView) rowView.findViewById(R.id.icon);
text1.setText(data[position]);
text2.setText(data2[position]);
icon.setImageResource(R.drawable.ic_launcher);
return rowView;
}
}
Пожалуйста, разместите свой полный код. –
Пожалуйста, разместите здесь ошибку. – AndyFaizan
проверьте [this] (http://intransitione.com/blog/advanced-listview-population-a-list-with-images-and-text/) учебник. – bakriOnFire