Я создал демонстрационное приложение для отображения списка продуктов на экране. список продуктов поступает с удаленного сервера. в журналах я вижу данные, поступающие и хранящиеся в arralist, но каким-то образом они не привязаны к списку. Я делаю http-вызов в фоновом режиме, используя класс async.Listadapter не обязательные значения для listview
ниже активность на создание кода
ListAdapter adapter;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_dbtest2_all_products);
Log.i("Entrey level=","entere dbtest2allproducts class");
// Hashmap for ListView
productsList = new ArrayList<HashMap<String, String>>();
// Loading products in Background Thread
new LoadAllProducts().execute();
// Get listview
ListView lv = new ListView(DBtest2AllProducts.this);
// updating listview
lv.setAdapter(adapter);
ниже postexecute метод
protected void onPostExecute(String file_url) {
// dismiss the dialog after getting all products
pDialog.dismiss();
// ((BaseAdapter) adapter).notifyDataSetChanged();
Log.i("before adapter",productsList.toString());
adapter = new SimpleAdapter(
DBtest2AllProducts.this, productsList,
R.layout.activity_dbtest2_list_items, new String[] { TAG_PID,
TAG_NAME},
new int[] { R.id.pid, R.id.name });
//setAdapter(adapter);
хотя я считаю, так как есть некоторые синхронизации проблема с setAdapter (адаптер) шаг, но я, так как я новичок в android, поэтому не мог делать ставку на него. Я попытался вызвать метод setAdapter (адаптер) и adapter.notifyDataSetChanged() с помощью метода postexecute, но оба они вызывают ошибку, говоря, что «метод не определен для этого типа». Однако, если я применил адаптер к (BaseAdapter), то adapter.notifyDataSetChanged() doesn 't бросать любую ошибку, но я actully не знаю, какая разница делает это кастинг, а также кастинг не работает.
Ниже журнал кот
I/before adapter(32729): [{pid=1, name=iphone 4s}, {pid=2, name=samsung}]
Пожалуйста, укажите, если вы видите какие-либо проблемы с кодом. Спасибо, что помогли заранее.
Ниже представлены макеты XML
all_product.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical">
<ListView
android:id="@android:id/list"
android:layout_width="fill_parent"
android:layout_height="wrap_content"/>
</LinearLayout>
list_item.xml
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="vertical" >
<TextView
android:id="@+id/pid"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:visibility="gone" />
<!-- Name Label -->
<TextView
android:id="@+id/name"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:paddingTop="20dip"
android:paddingLeft="10dip"
android:textSize="17sp"
android:textStyle="bold" />
</RelativeLayout>
переместить lv.setAdapter (адаптер); в onPostExecute, после адаптера = новый SimpleAdapter (... –
Я пробовал это, но он выдает ошибку «lv не может быть разрешен». Я думаю, что lv выходит за рамки метода post execute. –