Ketika data yang terkait dengan adaptor larik diubah, membatalkan tampilan daftar sudah cukup untuk menunjukkan nilai yang diperbarui? Bagian kode berikut tidak berfungsi, apakah saya salah paham tentang sesuatu di sini.?
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();
}
}
Tata letak yang digunakan:
<?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
keYourCustomAdapter
Ubah baris ini:
untuk:
dan setelah memperbarui nilai item daftar, panggil:
sumber
invalidate();
memanggil tampilan daftar untuk membatalkan dirinya sendiri (mis. warna latar belakang)invalidateViews();
memanggil semua anaknya menjadi tidak valid. memungkinkan Anda memperbarui tampilan anakSaya berasumsi itu adalah beberapa jenis efisiensi yang mencegah semua item terus-menerus harus digambar ulang jika tidak perlu.
sumber
Saya menemukan solusi yang lebih efisien daripada jawaban yang diterima saat ini, karena jawaban saat ini memaksa semua elemen daftar disegarkan. Solusi saya hanya akan menyegarkan satu elemen (yang tersentuh) dengan memanggil adaptor getView dan mendaur ulang tampilan saat ini yang bahkan menambahkan efisiensi lebih.
sumber