J'ai une activité avec un ListView qui utilise un SimpleAdapter. Voici l'onCreate:NullPointerException lors de la tentative de filtrage avec 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);
}
Cela fonctionne très bien; la liste apparaît et est remplie correctement. Permettez-moi de souligner que - le problème n'est pas avec ma méthode getEmailContacts() étant nulle, puisque la liste est rendue correctement à ce stade.
Je suis en train d'ajouter le filtrage si, et j'ajouter cette ligne après mContactsList.setAdapter pour l'essayer:
mContactAdapter.getFilter().filter("Ca");
Il en résulte un accident, avec la trace de pile suivante:
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)
Des suggestions? Est-ce que je manque quelque chose de vraiment évident?
Non, ce n'est pas le cas. Comme je l'ai dit, ça marche bien jusqu'à ce que j'appelle la méthode de filtrage. – Catherine
Hmm, désolé - j'ai raté cette partie de votre question. J'espérais que ce serait aussi simple :) En regardant la source, il apparaît que la méthode filter change l'objet mData en objet FilterResults.values. Cela finit par être nul en quelque sorte. –
Ouais, mais comment, là est la question. ;) – Catherine