package com.example.listviewanimationdemo; import java.util.Arrays; import com.example.listviewanimationdemo.base.BaseListActivity; import com.nhaarman.listviewanimations.ArrayAdapter; import com.nhaarman.listviewanimations.itemmanipulation.OnDismissCallback; import com.nhaarman.listviewanimations.itemmanipulation.swipedismiss.SwipeDismissAdapter; import com.nhaarman.listviewanimations.itemmanipulation.swipedismiss.contextualundo.ContextualUndoAdapter; import com.nhaarman.listviewanimations.itemmanipulation.swipedismiss.contextualundo.ContextualUndoAdapter.CountDownFormatter; import com.nhaarman.listviewanimations.itemmanipulation.swipedismiss.contextualundo.ContextualUndoAdapter.DeleteItemCallback; import android.content.Context; import android.content.Intent; import android.os.Bundle; import android.support.v4.app.FragmentActivity; import android.view.LayoutInflater; import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.view.ViewGroup; import android.widget.AbsListView; import android.widget.TextView; import android.widget.Toast; public class SwipeToDismissActivity extends BaseListActivity implements OnDismissCallback, DeleteItemCallback { public static void actionToSwipeDismiss(Context context) { Intent intent = new Intent(context, SwipeToDismissActivity.class); context.startActivity(intent); } private ArrayAdapter<Integer> mAdapter; @Override protected void onCreate(final Bundle savedInstanceState) { super.onCreate(savedInstanceState); mAdapter = createListAdapter(); setSwipeDismissAdapter(); } @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.swipe_to_dismiss, menu); return true; } public boolean onMenuItemSelected(int featureId, MenuItem item) { int id = item.getItemId(); switch (id) { case R.id.swipe_menu_main: setSwipeDismissAdapter(); break; case R.id.swipe_menu_with_undo: setContextualUndoAdapter(); break; case R.id.swipe_menu_with_undo_2: setContextualUndoWithTimedDeleteAdapter(); break; case R.id.swipe_menu_with_undo_3: setContextualUndoWithTimedDeleteAndCountDownAdapter(); break; default: break; } return true; } void initView() { // findViewById(R.id.home_item_animation_btn).setOnClickListener(this); // findViewById(R.id.home_item_expend_btn).setOnClickListener(this); // findViewById(R.id.home_swipe_to_dismiss_btn).setOnClickListener(this); } private void setSwipeDismissAdapter() { SwipeDismissAdapter adapter = new SwipeDismissAdapter(mAdapter, this); adapter.setAbsListView(getListView()); getListView().setAdapter(adapter); } @Override public void onDismiss(final AbsListView listView, final int[] reverseSortedPositions) { for (int position : reverseSortedPositions) { mAdapter.remove(position); } Toast.makeText(this, "Removed positions: " + Arrays.toString(reverseSortedPositions), Toast.LENGTH_SHORT).show(); } private void setContextualUndoAdapter() { ContextualUndoAdapter adapter = new ContextualUndoAdapter(mAdapter, R.layout.item_undo_row, R.id.undo_row_undobutton, this); adapter.setAbsListView(getListView()); getListView().setAdapter(adapter); } @Override public void deleteItem(final int position) { mAdapter.remove(position); mAdapter.notifyDataSetChanged(); } private void setContextualUndoWithTimedDeleteAdapter() { ContextualUndoAdapter adapter = new ContextualUndoAdapter(mAdapter, R.layout.item_undo_row, R.id.undo_row_undobutton, 3000, this); adapter.setAbsListView(getListView()); getListView().setAdapter(adapter); } private void setContextualUndoWithTimedDeleteAndCountDownAdapter() { ContextualUndoAdapter adapter = new ContextualUndoAdapter(mAdapter, R.layout.item_undo_row, R.id.undo_row_undobutton, 3000, R.id.undo_row_texttv, this, new MyFormatCountDownCallback()); adapter.setAbsListView(getListView()); getListView().setAdapter(adapter); } private class MyFormatCountDownCallback implements CountDownFormatter { @Override public String getCountDownString(final long millisUntilFinished) { int seconds = (int) Math.ceil(millisUntilFinished / 1000.0); if (seconds > 0) { return seconds+"s"; } return "..."; } } private class AnimSelectionAdapter extends ArrayAdapter<String> { public AnimSelectionAdapter() { addAll("Swipe-To-Dismiss", "Contextual Undo", "CU - Timed Delete", "CU - Count Down"); } @Override public View getView(final int position, final View convertView, final ViewGroup parent) { TextView tv = (TextView) convertView; if (tv == null) { tv = (TextView) LayoutInflater.from(SwipeToDismissActivity.this).inflate(android.R.layout.simple_list_item_1, parent, false); } tv.setText(getItem(position)); return tv; } } }