Когда данные, связанные с адаптером массива, изменены, недействительности списка достаточно для отображения обновленных значений? Следующий фрагмент кода не работает, я что-то неправильно понял?
public class ZeroItemListActivity extends Activity {
private ArrayList<String> listItems=new ArrayList<String>();
private ListView mMyListView;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
mMyListView=(ListView) findViewById(R.id.MyListView);
mMyListView.setAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1,listItems));
}
public void addItem(View v){
listItems.add("list Item");
mMyListView.invalidate();
}
}
Используемая раскладка:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="fill_parent"
android:layout_height="fill_parent">
<TextView android:layout_width="fill_parent"
android:layout_height="wrap_content" android:text="@string/hello" />
<ListView android:layout_width="wrap_content"
android:layout_height="wrap_content" android:id="@+id/MyListView"></ListView>
<Button android:layout_width="wrap_content"
android:layout_height="wrap_content" android:id="@+id/AddItemsButton"
android:text="Add Items" android:onClick="addItem"></Button>
</LinearLayout>
BaseAdapter
наYourCustomAdapter
Измените эту строку:
кому:
и после обновления значения элемента списка вызовите:
источник
invalidate();
вызывает представление списка для признания себя недействительным (т. е. цвет фона)invalidateViews();
вызывает недействительность всех его дочерних элементов. позволяя вам обновлять представления детейЯ предполагаю, что это какая-то эффективность, предотвращающая постоянную перерисовку всех элементов, если в этом нет необходимости.
источник
Я нашел решение, которое более эффективно, чем принятый в настоящее время ответ, потому что текущий ответ требует обновления всех элементов списка. Мое решение обновит только один элемент (который был затронут) путем вызова адаптеров getView и повторного использования текущего представления, что повысит эффективность.
источник