2
AsyncTask
에서 시작하는 내 ActionBar
의 메뉴 항목이 있는데 작업이 실행되는 동안 진행 상황을 표시하기 위해 메뉴 항목이 애니메이션으로 표시됩니다. 또한 어떤 항목을 클릭했는지에 따라 메뉴 항목이 변경되기 때문에 모든 ListView
에서 애니메이션이 새로 고쳐집니다. 나는 AsyncTask
이 실행 중인지 확인하고 onCreateOptionsMenu
에 있는지 확인하고 애니메이션을 다시 시작하는 것 이외에는 모든 것이 작동합니다 (애니메이션 다시 그리기 메뉴를 다시 그리기 때문에). 비록 이것을 할 더 좋은 방법이 있는지 확실하지 않습니다. 이 중요한 경우, 다른 코드에서 나는이 메뉴를 다시 사용하고 있습니다 :새로 고침 후 메뉴 항목 애니메이션을 유지 하시겠습니까?
참고 :
이
은AsyncTask
가 실행하고 하나 개의 메뉴 항목에 대한 애니메이션을 다시 시작하면 내가 확인해야하는 코드 :
if(android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.HONEYCOMB)
activity.invalidateOptionsMenu();
public class MyFragment extends SherlockListFragment
{
private MenuItem refreshItem;
private AsyncTask<Void, String, Void> fi;
private MenuItem refreshItem;
@Override
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
}
@Override
public void onActivityCreated(Bundle savedState) {
super.onActivityCreated(savedState);
fi = new FetchItems(activity, null);
fi.execute(); //this actually happen when the menu item is selected but I put here for this question
}
@Override
public void onCreateOptionsMenu(final Menu menu, final MenuInflater inflater) {
inflater.inflate(R.menu.main_menu, menu);
if (fi != null && fi.getStatus() == AsyncTask.Status.RUNNING)
{
if (refreshItem != null && refreshItem.getActionView() != null)
{
refreshItem.getActionView().clearAnimation();
refreshItem.setActionView(null);
this.StartAnimation();
}
}
else
refreshItem = menu.findItem(R.id.filter);
super.onCreateOptionsMenu(menu, inflater);
}
private class FetchItems extends AsyncTask<Void, String, Void>
{
@Override
protected void onPreExecute()
{
StartAnimation();
}
protected void onPostExecute(final Void unused)
{
if (refreshItem != null && refreshItem.getActionView() != null)
{
refreshItem.getActionView().clearAnimation();
refreshItem.setActionView(null);
}
}
}
private void StartAnimation() {
final LayoutInflater inflater = (LayoutInflater)getActivity().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
final ImageView ivRefresh = (ImageView)inflater.inflate(R.layout.refresh_view, null);
final Animation rotation = AnimationUtils.loadAnimation(getActivity(), R.anim.refresh);
ivRefresh.startAnimation(rotation);
refreshItem.setActionView(ivRefresh);
}
}
refresh.xml
<rotate
xmlns:android="http://schemas.android.com/apk/res/android"
android:fromDegrees="0"
android:toDegrees="360"
android:pivotX="50%"
android:pivotY="50%"
android:repeatCount="infinite"
android:interpolator="@android:anim/linear_interpolator"
android:duration="1000"
/>
당신이'ANIM/refresh.xml'을 추가하시기 바랍니다 수 있습니까? – sriramramani
@sriramramani가 refresh.xml을 사용하여 OP를 업데이트했습니다. –