У меня есть ListView, который я привязываю к адаптеру. Адаптер является защищенным членом моего основного класса. У меня есть поток прослушивателя, который получает данные и обновляет список источников для моего адаптера. Когда я вызываю метод адаптера notifyDataSetChanged(), возникает исключение:
Исключение времени выполнения: PhoneLayoutInflater(LayoutInflater).inflate(int, ViewGroup, boolean) строка: 322
Я читал, что метод notifyDataSetChanged() должен вызываться в потоке пользовательского интерфейса, и я это делаю. На самом деле, просто чтобы быть уверенным, я даже обновляю источник данных ListView в потоке пользовательского интерфейса. Все, что я делаю в своем потоке слушателя, — это обновляю защищенный член, в котором хранятся данные. Вот пример того, что я делаю (обратите внимание, что у меня нет части кода, которая вызывает AsyncTask, но она запускается слушателем):
public class main extends Activity() {
protected LinkedList<HashMap<String, String>> adapterDataList = new LinkedList<HashMap<String, String>>();
protected MyDataObject dataObject;
protected SimpleAdapter dataAdapter;
@Override
public void onCreate(Bundle savedInstanceState) {
//call parent oncreate
super.onCreate(savedInstanceState);
//display the main form
setContentView(R.layout.main);
//get a handle on the score list view elements
ListView dataList = (ListView)(findViewById(R.id.datalist));
//link the adapter and the data source
dataAdapter = new SimpleAdapter(this, adapterDataList, R.layout.row, new String[]{"name","address"}, new int[]{R.id.username,R.id.address});
dataList.setAdapter(dataAdapter);
}
protected void refreshData() {
adapterDataList.clear();
Iterator<MyData> iter = MyDataObject.iterator();
while(iter.hasNext()) {
HashMap<String, String> item = new HashMap<String, String>()
item.put("name", iter.name);
item.put("address", iter.address);
adapterDataList.add(item);
}
dataAdapter.notifyDataSetChanged();
}
private class DataTask extends AsyncTask<Data, Void, Data> {
protected void onPostExecute(Data data) {
dataObject = data;
runOnUiThread (new Runnable() { public void run() {
refreshScores();
}});
}
}
...
}
У кого-нибудь есть какие-либо указатели или идеи относительно того, почему я получаю это исключение? Любая помощь очень ценится.
изменить Вот файлы макета, как и просили: main.xml:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:ptl="http://schemas.android.com/apk/res/com.mod0.pubtrivialive"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:id="@+id/datalistcontainer">
<ListView android:id="@+id/datalist"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
</LinearLayout>
строка.xml:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:paddingBottom="6dip"
android:paddingTop="4dip">
<TextView android:id="@+id/name"
android:layout_width="80dip"
android:layout_height="wrap_content" />
<TextView android:id="@+id/address"
android:layout_height="wrap_content"
android:layout_weight="1" />
</LinearLayout>
adapterDataList.add(item);
- person Falmarri   schedule 07.10.2010