Implement swiping left/right to delete messages (closes #38).
This commit is contained in:
committed by
Jannis Mattheis
parent
fd07cad969
commit
5fa5711f36
@@ -56,6 +56,10 @@ public class ListMessageAdapter extends RecyclerView.Adapter<ListMessageAdapter.
|
||||
.build();
|
||||
}
|
||||
|
||||
public MessageWithImage getItem(int position) {
|
||||
return items.get(position);
|
||||
}
|
||||
|
||||
void items(List<MessageWithImage> items) {
|
||||
this.items = items;
|
||||
}
|
||||
|
||||
@@ -15,6 +15,7 @@ import android.view.View;
|
||||
import android.widget.ImageButton;
|
||||
import android.widget.TextView;
|
||||
import android.widget.ViewFlipper;
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.appcompat.app.ActionBarDrawerToggle;
|
||||
import androidx.appcompat.app.AlertDialog;
|
||||
import androidx.appcompat.app.AppCompatActivity;
|
||||
@@ -22,6 +23,7 @@ import androidx.appcompat.widget.Toolbar;
|
||||
import androidx.core.view.GravityCompat;
|
||||
import androidx.drawerlayout.widget.DrawerLayout;
|
||||
import androidx.recyclerview.widget.DividerItemDecoration;
|
||||
import androidx.recyclerview.widget.ItemTouchHelper;
|
||||
import androidx.recyclerview.widget.LinearLayoutManager;
|
||||
import androidx.recyclerview.widget.RecyclerView;
|
||||
import androidx.swiperefreshlayout.widget.SwipeRefreshLayout;
|
||||
@@ -142,12 +144,17 @@ public class MessagesActivity extends AppCompatActivity
|
||||
DividerItemDecoration dividerItemDecoration =
|
||||
new DividerItemDecoration(
|
||||
messagesView.getContext(), layoutManager.getOrientation());
|
||||
ListMessageAdapter adapter =
|
||||
new ListMessageAdapter(this, settings, picasso, emptyList(), this::delete);
|
||||
|
||||
messagesView.addItemDecoration(dividerItemDecoration);
|
||||
messagesView.setHasFixedSize(true);
|
||||
messagesView.setLayoutManager(layoutManager);
|
||||
messagesView.addOnScrollListener(new MessageListOnScrollListener());
|
||||
messagesView.setAdapter(
|
||||
new ListMessageAdapter(this, settings, picasso, emptyList(), this::delete));
|
||||
messagesView.setAdapter(adapter);
|
||||
|
||||
ItemTouchHelper itemTouchHelper = new ItemTouchHelper(new SwipeToDeleteCallback(adapter));
|
||||
itemTouchHelper.attachToRecyclerView(messagesView);
|
||||
|
||||
swipeRefreshLayout.setOnRefreshListener(this::onRefresh);
|
||||
drawer.addDrawerListener(
|
||||
@@ -349,6 +356,30 @@ public class MessagesActivity extends AppCompatActivity
|
||||
picasso.shutdown();
|
||||
}
|
||||
|
||||
private class SwipeToDeleteCallback extends ItemTouchHelper.SimpleCallback {
|
||||
ListMessageAdapter adapter;
|
||||
|
||||
public SwipeToDeleteCallback(ListMessageAdapter adapter) {
|
||||
super(0, ItemTouchHelper.LEFT | ItemTouchHelper.RIGHT);
|
||||
this.adapter = adapter;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onMove(
|
||||
@NonNull RecyclerView recyclerView,
|
||||
@NonNull RecyclerView.ViewHolder viewHolder,
|
||||
@NonNull RecyclerView.ViewHolder target) {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onSwiped(@NonNull RecyclerView.ViewHolder viewHolder, int direction) {
|
||||
int position = viewHolder.getAdapterPosition();
|
||||
Message message = adapter.getItem(position).message;
|
||||
MessagesActivity.this.delete(message);
|
||||
}
|
||||
}
|
||||
|
||||
private class MessageListOnScrollListener extends RecyclerView.OnScrollListener {
|
||||
@Override
|
||||
public void onScrollStateChanged(RecyclerView view, int scrollState) {}
|
||||
|
||||
Reference in New Issue
Block a user