Здравствуйте!
В приложении есть фрагмент со списком, который заполняется из базы данных с помощью SimpleCursorAdapter.
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
cursor = db.query(TABLE_NAME, null, null, null, null, null, null); // В коде непрямой вызов бд, но итог таков.
...
scAdapter = new SimpleCursorAdapter(getActivity(),
R.layout.rowlayout, cursor, from, to);
...
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_alarmclock, container, false);
mListView = (AbsListView) view.findViewById(android.R.id.list);
mListView.setAdapter(scAdapter);
mListView.setOnItemClickListener(this);
return view;
}
В другом активити я добавляю элемент в базу данных
ContentValues cv = new ContentValues();
cv.put("text", entTime.getText().toString());
...
db.insert(TABLE_NAME, null, cv); // Тоже не вызывается напрямую.
Проблема такова:
Если добавить новый элемент в базу данных в соответствующем активити, то при возвращении в активити, где содержится фрагмент со списком, будет хорошо видна отрисовка некоторых полей списка (они плавно так появляются).
Экспериментально я установил следующие факты:
- Если добавить элемент с пустыми полями, то эффекта плавного появления нет, пустые строки уже ждут нас при возвращении в фрагмент. Если добавить хотя бы одно поле с текстом, который будет выводиться в TextView в rowlayout.xml, то проблема возобновится.
- Этот эффект появления виден не с определенного количества уже существующих строк в списке, а с области, которая этим строками занимается. То есть если наша новая строка попадает в нижнюю примерно половину экрана, то тогда с ней будет такой вот эффект замедленной отрисовки. Например, в списке есть уже 6 строк по 100dp в высоту, тогда добавим седьмую строку, её появление при возврате в фрагмент будет замедлено; добавим восьмую строку, тогда седьмая и восьмая строки вновь появятся замедленно. Если ничего не добавим, то все восемь строк моментально появятся. Теперь пусть у нас строки размером по 200dp, тогда всё начнёт повторяться примерно с четвёртой строки.
Напрашивается вывод, что не заполнение списка элементами происходит медленно, а его отрисовка, но разве список с одним текстовым полем в каждой строке требует больших ресурсов на это дело?
Творится что-то неясное, и я не могу понять, что именно :(
Заранее благодарю за любые мысли в слух по поводу.
UPD:
Если сделать кнопку в том же активити, где располагается фрагмент со списком, при нажатии на которую будет добавляться элемент в БД, и обновляться курсор адаптера, то все работает как часы.
UPD2:
Если возвращаться из нового активити кнопкой назад, то всё окей. Проблема только при возврате через кнопку "назад" в Action bar (getSupportActionBar().setHomeButtonEnabled(true);).