Я реализовал простой адаптер курсора в виде списка. Тогда я проведу пальцем вправо или влево. При смахивании я получаю новый курсор и обновляю список. Все отлично работает здесь, элементы удаляются, и я правильно получаю новый курсор. Однако у меня проблемы с анимацией. Когда я добавляю анимацию и смахиваю на право (левый еще не реализован), удаляется более 1 элемента. Например, если у меня есть 4 предмета и я уберу четвертый, тогда пункты 1 и 3 останутся, 2 и 4 потерялись бы, как я заметил, или что-то похожее. 2 на время выдвигаются, когда я выдвигаюсь на 1 предмет.
Вот мой код:
listView.setOnTouchListener(new OnSwipeTouchListener(getApplicationContext()) {
@Override
public void onSwipeRight(int pos) {
singleView = getViewByPosition(pos, listView);
dbManager.open();
int i = cursor.getColumnIndex("position");
int po = cursor.getInt(i);
mainposition = Integer.toString(po);
dbManager.updatePosition(mainposition,"3");
new AsyncTask().execute();
//this method is a problem!!!
//slideOutRight(singleView);
}
public void onSwipeLeft(int pos) {
Toast.makeText(MainWorkplace.this, "left", Toast.LENGTH_SHORT).show();
}
});
Вот моя задача Asyn c для обработки БД:
class AsyncTask extends android.os.AsyncTask<String, Integer, String>{
@Override
protected String doInBackground(String... strings) {
cursor = dbManager.getOpenNotifications();
return null;
}
@Override
protected void onPostExecute(String jsonResponse) {
super.onPostExecute(jsonResponse);
dbManager.open();
try {
simpleCursorAdapter.swapCursor(cursor);
simpleCursorAdapter.notifyDataSetChanged();
} catch (Exception e) {
//todo
e.printStackTrace();
}
}
}
Метод получения View из ListView на основе позиции :
public View getViewByPosition(int pos, ListView listView) {
final int firstListItemPosition = listView.getFirstVisiblePosition();
final int lastListItemPosition = firstListItemPosition + listView.getChildCount() - 1;
if (pos < firstListItemPosition || pos > lastListItemPosition ) {
return listView.getAdapter().getView(pos, null, listView);
} else {
final int childIndex = pos - firstListItemPosition;
return listView.getChildAt(childIndex);
}
}
Метод проблематики c Я думаю, что этот метод, но я не могу понять его.
private void slideOutRight(View view) {
Animation slideRight = AnimationUtils.loadAnimation(view.getContext(), R.anim.slide_out_right);
if (slideRight != null) {
slideRight.setAnimationListener(new ViewAnimationListener(view) {
@Override
protected void onAnimationStart(View view, Animation animation) {
//todo set background
}
@Override
protected void onAnimationEnd(View view, Animation animation) {
view.setVisibility(View.GONE);
}
});
Log.i("view2", view.toString());
view.startAnimation(slideRight);
}
}
и -
private abstract class ViewAnimationListener implements Animation.AnimationListener {
private final View view;
protected ViewAnimationListener(View view) {
this.view = view;
}
@Override
public void onAnimationStart(Animation animation) {
onAnimationStart(this.view, animation);
}
@Override
public void onAnimationEnd(Animation animation) {
onAnimationEnd(this.view, animation);
}
@Override
public void onAnimationRepeat(Animation animation) {
}
protected abstract void onAnimationStart(View view, Animation animation);
protected abstract void onAnimationEnd(View view, Animation animation);
}