Исключение при удалении представления из LinearLayout в Android

Im пытается анимировать пользовательский вид перед его удалением из контейнера LinearLayout. Только я продолжаю получать исключение NullPointerException, которое я не могу отслеживать в любом конкретном случае.

Исключение происходит, когда я добавил два представления и удалю первый.

Мой код:

protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.form_alg); fadeInAnimation = AnimationUtils.loadAnimation(getApplicationContext(), R.anim.witness_fade_in); list = (LinearLayout) this.findViewById(R.id.alg_list_getuigen); addWitness = (ImageButton) this .findViewById(R.id.alg_getuige_toevoegen); addWitness.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { final View w = View.inflate(getApplicationContext(), R.layout.form_getuige, null); ImageButton button = (ImageButton) w .findViewById(R.id.getuige_verwijderen); button.setOnClickListener(new android.view.View.OnClickListener() { @Override public void onClick(View v) { Log.d(TAG, "deleteView"); Animation fadeOutAnimation = AnimationUtils .loadAnimation(getApplicationContext(), R.anim.witness_fade_out); fadeOutAnimation .setAnimationListener(new AnimationListener() { @Override public void onAnimationEnd( Animation animation) { list.removeView(w); list.invalidate(); } @Override public void onAnimationRepeat( Animation animation) { } @Override public void onAnimationStart( Animation animation) { } }); w.setVisibility(View.VISIBLE); w.startAnimation(fadeOutAnimation); w.setVisibility(View.INVISIBLE); } }); Log.d(TAG, "addView"); w.setVisibility(View.INVISIBLE); list.addView(w); w.startAnimation(fadeInAnimation); w.setVisibility(View.VISIBLE); list.invalidate(); } }); } 

Вот стек:

 07-03 03:17:30.335: WARN/dalvikvm(343): threadid=1: thread exiting with uncaught exception (group=0x40015560) 07-03 03:17:30.365: ERROR/AndroidRuntime(343): FATAL EXCEPTION: main 07-03 03:17:30.365: ERROR/AndroidRuntime(343): java.lang.NullPointerException 07-03 03:17:30.365: ERROR/AndroidRuntime(343): at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1372) 07-03 03:17:30.365: ERROR/AndroidRuntime(343): at android.view.ViewGroup.drawChild(ViewGroup.java:1644) 07-03 03:17:30.365: ERROR/AndroidRuntime(343): at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1373) 07-03 03:17:30.365: ERROR/AndroidRuntime(343): at android.view.View.draw(View.java:6986) 07-03 03:17:30.365: ERROR/AndroidRuntime(343): at android.widget.FrameLayout.draw(FrameLayout.java:357) 07-03 03:17:30.365: ERROR/AndroidRuntime(343): at android.widget.ScrollView.draw(ScrollView.java:1409) 07-03 03:17:30.365: ERROR/AndroidRuntime(343): at android.view.ViewGroup.drawChild(ViewGroup.java:1646) 07-03 03:17:30.365: ERROR/AndroidRuntime(343): at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1373) 07-03 03:17:30.365: ERROR/AndroidRuntime(343): at android.view.ViewGroup.drawChild(ViewGroup.java:1644) 07-03 03:17:30.365: ERROR/AndroidRuntime(343): at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1373) 07-03 03:17:30.365: ERROR/AndroidRuntime(343): at android.view.View.draw(View.java:6883) 07-03 03:17:30.365: ERROR/AndroidRuntime(343): at android.widget.FrameLayout.draw(FrameLayout.java:357) 07-03 03:17:30.365: ERROR/AndroidRuntime(343): at android.view.ViewGroup.drawChild(ViewGroup.java:1646) 07-03 03:17:30.365: ERROR/AndroidRuntime(343): at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1373) 07-03 03:17:30.365: ERROR/AndroidRuntime(343): at android.view.ViewGroup.drawChild(ViewGroup.java:1644) 07-03 03:17:30.365: ERROR/AndroidRuntime(343): at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1373) 07-03 03:17:30.365: ERROR/AndroidRuntime(343): at android.view.View.draw(View.java:6883) 07-03 03:17:30.365: ERROR/AndroidRuntime(343): at android.widget.FrameLayout.draw(FrameLayout.java:357) 07-03 03:17:30.365: ERROR/AndroidRuntime(343): at com.android.internal.policy.impl.PhoneWindow$DecorView.draw(PhoneWindow.java:1862) 07-03 03:17:30.365: ERROR/AndroidRuntime(343): at android.view.ViewRoot.draw(ViewRoot.java:1522) 07-03 03:17:30.365: ERROR/AndroidRuntime(343): at android.view.ViewRoot.performTraversals(ViewRoot.java:1258) 07-03 03:17:30.365: ERROR/AndroidRuntime(343): at android.view.ViewRoot.handleMessage(ViewRoot.java:1859) 07-03 03:17:30.365: ERROR/AndroidRuntime(343): at android.os.Handler.dispatchMessage(Handler.java:99) 07-03 03:17:30.365: ERROR/AndroidRuntime(343): at android.os.Looper.loop(Looper.java:123) 07-03 03:17:30.365: ERROR/AndroidRuntime(343): at android.app.ActivityThread.main(ActivityThread.java:3683) 07-03 03:17:30.365: ERROR/AndroidRuntime(343): at java.lang.reflect.Method.invokeNative(Native Method) 07-03 03:17:30.365: ERROR/AndroidRuntime(343): at java.lang.reflect.Method.invoke(Method.java:507) 07-03 03:17:30.365: ERROR/AndroidRuntime(343): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839) 07-03 03:17:30.365: ERROR/AndroidRuntime(343): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597) 07-03 03:17:30.365: ERROR/AndroidRuntime(343): at dalvik.system.NativeStart.main(Native Method) 

У меня такая же проблема. Вы должны использовать обработчик для выполнения кода, который модифицирует пользовательский интерфейс (removeView () в этом случае). Я бы добавил поле обработчика и построил его в методе onCreate (). Затем в onAnimationEnd () просто выполните следующее:

 fHandler.post(new Runnable() { @Override public void run() { list.removeView(w); list.invalidate(); } } 

Чтобы удалить все дочерние элементы макета, а затем добавить новые дочерние элементы, найдите ниже код

 if (linearLayout.getChildCount() > 0) { linearLayout.removeAllViewsInLayout(); linearLayout.invalidate(); }