2016-07-20 21 views
0

Ich habe ein listView und ich verwende ArrayAdapter.addAll die data.I laden möchte ListView.getChild(0) nach ArrayAdapter.addAll bei once.But Gebrauch verwenden NullPointerException geworfen wurde.Verwenden Handler.post() Listview zu aktualisieren

Ich versuche, die ListView.getChild(0) an die MessageQueue mit Handler.post hinzuzufügen.Die App funktioniert manchmal seit wie ich das tun, aber manchmal die NullPointerException wurde auch geworfen.

Mein Code:

mRightAdapter.addAll(mRightDisplayDatas); 
mHandler.post(new Runnable() { 
    @Override public void run() { 
    ((TextView) mLeftListView.getChildAt(0)).setCompoundDrawablesWithIntrinsicBounds(null, null, getResources().getDrawable(R.mipmap.ic_right, mContext.getTheme()), null); 
    } 
}); 

log:

FATAL EXCEPTION: main 
                    Process: com.buledon.volunteerapp, PID: 4787 
                    java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.TextView.setCompoundDrawablesWithIntrinsicBounds(android.graphics.drawable.Drawable, android.graphics.drawable.Drawable, android.graphics.drawable.Drawable, android.graphics.drawable.Drawable)' on a null object reference 
                     at com.buledon.volunteerapp.widget.CitySelectView$3.run(CitySelectView.java:130) 
                     at android.os.Handler.handleCallback(Handler.java:739) 
                     at android.os.Handler.dispatchMessage(Handler.java:95) 
                     at android.os.Looper.loop(Looper.java:135) 
                     at android.app.ActivityThread.main(ActivityThread.java:5669) 
                     at java.lang.reflect.Method.invoke(Native Method) 
                     at java.lang.reflect.Method.invoke(Method.java:372) 
                     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:960) 
                     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:755) 
+0

bitte zugehörigen Code zeigt zusammen mit Abfrage wird besser understading gibt –

+0

nur 2 Zeilen Code –

+0

Bitte teilen Sie Ihre stacktrace, wenn Sie eine NPE haben – 0xDEADC0DE

Antwort

2

Auch mRightAdapter.notifyDataSetChanged verwenden. Auch hinzugefügte Werte werden nicht sofort in der Listenansicht angezeigt. Verwenden Sie mHandler.postDelayed und fügen Sie eine Verzögerung von wenigen Millisekunden hinzu. Sie können überprüfen, ob getChild (0) nicht null ist. Wenn sein Nullwert den Handler erneut sendet.

Ein saubererer Weg wäre, diesen Code in der getView() - Methode der Adapter-Klasse hinzuzufügen und nach dem Index der gewünschten Ansicht zu suchen. Wenn es 0 ist, dann führe deinen Code aus. Auf diese Weise werden Sie Ihre Sachen am richtigen Ort und zur richtigen Zeit tun.

Verwandte Themen