1
所以,標題幾乎說明了一切。我有一個listview,裏面填充了一個顯示數據庫數據的自定義遊標適配器。我有一個將項目添加到列表的工作正常,但無法獲得從列表中刪除項目的動畫工作的動畫。我擔心該項目正在從數據庫中刪除,並且在動畫有機會執行之前正在刷新列表。我很感激任何幫助解決這個問題。LayoutTransition DISAPPEARING動畫不適用於光標適配器
動畫代碼
LayoutTransition transition = new LayoutTransition();
Animator appearAnim = ObjectAnimator.ofFloat(null, "rotationX", 90f, 0f)
.setDuration(android.R.integer.config_shortAnimTime);
Animator disappearAnim = ObjectAnimator.ofFloat(null, "alpha", 1f, 0f)
.setDuration(android.R.integer.config_longAnimTime);
transition.setAnimator(LayoutTransition.APPEARING, appearAnim);
transition.setAnimator(LayoutTransition.DISAPPEARING, disappearAnim);
mNotesListView.setLayoutTransition(transition);
的delete注意方法
@Override
public void deleteNote(final String noteId) {
new Thread() {
@Override
public void run() {
super.run();
mNotesTable.deleteNote(mDb, noteId);
int notebookNumber = mNoteBookFragment.getNotebookNumber();
final Cursor cursor = mNotesTable.notesQuery(mDb, notebookNumber);
runOnUiThread(new Runnable() {
@Override
public void run() {
mNoteBookFragment.refreshNoteList(cursor);
Toast.makeText(BlocNotes.this,
getString(R.string.delete_note_toast), Toast.LENGTH_LONG).show();
}
});
}
}.start();
}
,並刷新列表
public void refreshNoteList(Cursor cursor) {
mNoteAdapter.changeCursor(cursor);
mNoteAdapter.notifyDataSetChanged();
setNewNoteText(""); //clear the text
}
編輯刷新方法
public void refreshNoteList(Cursor cursor) {
mTransition.removeChild(mNoteAdapter.getParent(), mNoteAdapter.getView());
mNoteAdapter.changeCursor(cursor);
mNoteAdapter.notifyDataSetChanged();
setNewNoteText(""); //clear the text
}
嘿,對不起,剛剛回到這個工作後,另一個項目。看來加載器可能是最好的方式去這麼謝謝你。我將在未來的項目中研究這一點。但是,removeChild方法沒有骰子。我在上面添加了我更新的刷新方法,但我只是簡單地將轉換添加爲成員變量,併爲適配器中的視圖和父級添加了getter。我不確定這是否正確,請讓我知道 – 2014-12-23 17:29:25
好吧,所以實現此可運行性本質上不會導致應用程序無法正常工作。它似乎甚至沒有運行,因爲當我添加或刪除它的東西時,列表未更新 – 2014-12-29 22:52:40
嗨!對不起長時間的沉默。我對這段代碼有點困惑: 'mTransition.removeChild(mNoteAdapter.getParent(),mNoteAdapter.getView());' 您需要獲取對ListView實例的引用並獲取它的子視圖(您想要刪除的視圖)。你也可以嘗試設置孩子對'View.GONE'的可見性,它也會觸發動畫。 – Nikolai 2015-02-08 00:55:52