0
我有一個使用SimpleAdapter的ListView活動。這裏是onCreate:NullPointerException嘗試使用SimpleAdapter進行過濾
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.contact_selection);
Intent intent = getIntent();
mContactsList = (ListView) findViewById(R.id.contacts_list);
mContactAdapter = new SimpleAdapter(this, getEmailContacts(), R.layout.contact_list_item,
new String[] { CONTACT_FIELDS.NAME.toString(), CONTACT_FIELDS.PHOTOURI.toString(),
CONTACT_FIELDS.SECONDARY_DATA.toString(), CONTACT_FIELDS.TYPE.toString() },
new int[] { R.id.contact_name, R.id.contact_image, R.id.contact_type_name,
R.id.contact_type_name });
mContactsList.setAdapter(mContactAdapter);
}
這工作正常;該列表顯示並填寫正確。讓我強調一下 - 問題不在於我的getEmailContacts()方法爲空,因爲此時列表正確地呈現。
我想,雖然加過濾,所以我加入這行後mContactsList.setAdapter嘗試一下:
mContactAdapter.getFilter().filter("Ca");
這導致崩潰,與以下堆棧跟蹤:
FATAL EXCEPTION: main
java.lang.NullPointerException
at android.widget.SimpleAdapter.getCount(SimpleAdapter.java:93)
at android.widget.AdapterView.checkFocus(AdapterView.java:712)
at android.widget.AdapterView$AdapterDataSetObserver.onInvalidated(AdapterView.java:835)
at android.widget.AbsListView$AdapterDataSetObserver.onInvalidated(AbsListView.java:5966)
at android.database.DataSetObservable.notifyInvalidated(DataSetObservable.java:50)
at android.widget.BaseAdapter.notifyDataSetInvalidated(BaseAdapter.java:59)
at android.widget.SimpleAdapter$SimpleFilter.publishResults(SimpleAdapter.java:383)
at android.widget.Filter$ResultsHandler.handleMessage(Filter.java:282)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:137)
at android.app.ActivityThread.main(ActivityThread.java:5041)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:511)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
at dalvik.system.NativeStart.main(Native Method)
有什麼建議嗎?我錯過了真正明顯的東西嗎?
不,情況並非如此。就像我說的,它直到我調用過濾方法才能正常工作。 – Catherine 2013-04-09 20:41:02
嗯,對不起 - 我錯過了你的問題的一部分。我希望這會很容易:)。從查看源代碼看來,過濾器方法將mData對象更改爲FilterResults.values對象。不知怎的,這最終是空的。 – 2013-04-09 21:09:11
是的,但是如何解決這個問題。 ;) – Catherine 2013-04-09 22:07:39