У меня есть ViewPager, где один из его принадлежащих ему фрагментов имеет свой собственный элемент ActionBar, так что, когда вы переходите на эту страницу, элемент появляется в ActionBar, переходите на другую страницу, элемент уходит.
Я бы хотел, чтобы это произошло с анимацией fade-in/fade-out, но не знаю, как это сделать.
Я пробовал следующее. Но это дает мне NullPointerExecption на itemView.startAnimation(fade_in);
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
inflater.inflate(R.menu.intruders_list, menu);
// Setup animation
Animation fade_in = AnimationUtils.loadAnimation(getActivity(), android.R.anim.fade_in);
fade_in.setInterpolator(new AccelerateInterpolator());
fade_in.setDuration(250);
// Animate
MenuItem deleteItem = menu.findItem(R.id.action_delete);
View itemView = deleteItem.getActionView();
itemView.startAnimation(fade_in); // NPE HERE
super.onCreateOptionsMenu(menu, inflater);
}
Вы получаете NullPointerException
, потому что пытаетесь получить вид действия, где ни один не установлен. getActionView()
возвращает null
в вашем случае.
Чтобы решить эту проблему, вам нужно установить ее с помощью deleteItem.setActionView(R.layout.layout_action_view);
.
В качестве альтернативы вы можете установить его с помощью android:actionLayout="@layout/layout_action_view"
на свой элемент в intruders_list.xml
.
layout_action_view.xml
может выглядеть так просто:
<?xml version="1.0" encoding="utf-8"?>
<ImageView xmlns:android="http://schemas.android.com/apk/res/android"
style="?android:attr/actionButtonStyle"
android:id="@+id/iv_action"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@android:drawable/ic_menu_rotate" />