У меня была эта проблема в течение долгого времени, и после нескольких часов попыток найти решение я решил попробовать и попросить совета здесь.
У меня есть фрагмент, который в основном представляет собой календарь. Он состоит из GridView, который заполняет адаптер (он также выделяет дни, в которые есть данные в базе данных SQLite). Основная проблема в том, что при установке этого адаптера он "замораживает" экран на несколько сотен миллисекунд и делает анимацию не плавной.
Примером того, что анимация не работает гладко, является случай, когда я нажимаю кнопку в SlidingMenu (jfeinstein10). Когда я нажимаю кнопку, которая заменяет текущий фрагмент фрагментом календаря, анимация выдвижения SlidingMenu не работает плавно. После долгих поисков виновника я обнаружил, что это происходит, когда я устанавливаю адаптер в GridView (gridview.setAdapter(adapter);
)
Я уже пробовал с AsyncTask безрезультатно.
Итак, мой вопрос: как настроить адаптер таким образом, чтобы он не влиял на анимацию слайдов, которая возникает во время его установки?
Некоторый код фрагмента календаря для справки:
@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
context = getActivity();
month = (GregorianCalendar) GregorianCalendar.getInstance();
month.setFirstDayOfWeek(GregorianCalendar.MONDAY);
itemmonth = (GregorianCalendar) month.clone();
items = new ArrayList<String>();
adapter = new CalendarAdapter(context, month);
gridview = (GridView) view.findViewById(R.id.calendarGridView);
gridview.setAdapter(adapter);
handler = new Handler();
handler.post(calendarUpdater);
title = (TextView) view.findViewById(R.id.currentMonthTextView);
title.setText(android.text.format.DateFormat.format("MMMM yyyy", month));
previous = (Button) view.findViewById(R.id.prevMonthButton);
previous.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
setPreviousMonth();
refreshCalendar();
}
});
[the code continues but I don't think it's relevant]
}
Когда я подавляю строку gridview.setAdapter(adapter);
, она работает гладко, так что это должно быть проблемой.
В фрагменте меню:
@Override
public void onClick(View v) {
Fragment newContent = null;
switch (v.getId()) {
case R.id.homeButton:
newContent = new TabFragment1();
break;
case R.id.diaryButton:
newContent = new TabFragment1();
break;
case R.id.calendarButton:
newContent = new TabFragment2();
break;
case R.id.statsButton:
newContent = new StatsFragment();
break;
}
if (newContent != null)
switchFragment(newContent);
updateSelector(v);
}
private void switchFragment(Fragment fragment) {
if (getActivity() == null)
return;
if (getActivity() instanceof Main) {
Main mainAct = (Main) getActivity();
mainAct.switchContent(fragment);
}
}
В основной деятельности:
public void switchContent(Fragment fragment) {
mContent = fragment;
getSupportFragmentManager()
.beginTransaction()
.replace(R.id.content_frame, fragment)
.commit();
getSlidingMenu().showContent();
}
Эта проблема делает пользовательский опыт очень плохим, поэтому, пожалуйста, если у вас есть какие-либо идеи, дайте мне знать.
onCreateAnimation
во фрагменте и установив адаптер в методеonAnimationEnd
- person user2925084   schedule 15.03.2014