How to scroll to delete on RecyclerView?

I have a history page displaying requests that the user has accepted or published. I was able to successfully put a button for the user to delete the entire history that the user has. Now I want the user to be able to delete the story one at a time by scrolling through it.

HistoryFragment.java

RecyclerView rView; Button clear; DatabaseReference dRef; LinearLayoutManager llm; String id; View myView; @Nullable @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { myView = inflater.inflate(R.layout.history, container, false); FirebaseUser fu = FirebaseAuth.getInstance().getCurrentUser(); id = fu.getUid(); dRef = FirebaseDatabase.getInstance().getReference().child("History"+id); clear = (Button) myView.findViewById(R.id.clear); rView = (RecyclerView) myView.findViewById(R.id.history_list); rView.setHasFixedSize(true); llm = new LinearLayoutManager(getActivity()); llm.setReverseLayout(true); llm.setStackFromEnd(true); rView.setLayoutManager(llm); clear.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { dRef.removeValue(); } }); return myView; } @Override public void onStart() { super.onStart(); FirebaseRecyclerAdapter<HistoryData, HistoryFragment.RequestViewHolder> fra = new FirebaseRecyclerAdapter<HistoryData, HistoryFragment.RequestViewHolder>( HistoryData.class, R.layout.historylistview, HistoryFragment.RequestViewHolder.class, dRef ) { @Override protected void populateViewHolder(final HistoryFragment.RequestViewHolder viewHolder, HistoryData model, final int position) { viewHolder.setTrans(model.getTrans()); viewHolder.setRequestDeadline(model.getRequestDeadline()); viewHolder.setRequestDescription(model.getRequestDescription()); viewHolder.setDateTimeAccepted(model.getDateTimeAccepted()); viewHolder.setRequestLocation(model.getRequestLocation()); viewHolder.setProfile(getApplicationContext() ,model.getProfile()); } }; rView.setAdapter(fra); } public static class RequestViewHolder extends RecyclerView.ViewHolder{ View myView; public RequestViewHolder(View itemView) { super(itemView); myView = itemView; } public void setTrans(String profile){ TextView trans = (TextView) myView.findViewById(R.id.transaction); trans.setText(profile); } public void setRequestDeadline(String dead){ TextView rdead = (TextView) myView.findViewById(R.id.rDead); rdead.setText(dead); } public void setRequestDescription(String desc){ TextView rdesc = (TextView) myView.findViewById(R.id.rDesc); rdesc.setText(desc); } public void setDateTimeAccepted(String date){ TextView dta = (TextView) myView.findViewById(R.id.rAccept); dta.setText(date); } public void setRequestLocation(String loc){ TextView rloc = (TextView) myView.findViewById(R.id.rLoc); rloc.setText(loc); } public void setProfile(Context c, String profile){ ImageView rprofile = (ImageView) myView.findViewById(R.id.HPicture); Picasso.with(c).load(profile).into(rprofile); } } @Override public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { super.onCreateOptionsMenu(menu, inflater); } 

I have not tried anything because the other questions that I have seen here so far do not seem to resemble my codes.

+5
source share
2 answers

It is quite simple, and you can do it without using a third-party library.

 ItemTouchHelper itemTouchHelper = new ItemTouchHelper(simpleItemTouchCallback); itemTouchHelper.attachToRecyclerView(rv); 

And now the callback

 ItemTouchHelper.SimpleCallback simpleItemTouchCallback = new ItemTouchHelper.SimpleCallback(0, ItemTouchHelper.LEFT | ItemTouchHelper.RIGHT | ItemTouchHelper.DOWN | ItemTouchHelper.UP) { @Override public boolean onMove(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder, RecyclerView.ViewHolder target) { Toast.makeText(MyActivity.this, "on Move", Toast.LENGTH_SHORT).show(); return false; } @Override public void onSwiped(RecyclerView.ViewHolder viewHolder, int swipeDir) { Toast.makeText(MyActivity.this, "on Swiped ", Toast.LENGTH_SHORT).show(); //Remove swiped item from list and notify the RecyclerView final int position = viewHolder.getAdapterPosition(); adapter.notifyItemRemoved(position); } }; 

Now you can determine which of your items was taken. You can remove the item from your adapter and notifyDataSetChanged() .

+9
source

You will need to use the existing library / widget if you do not want to create functionality from scratch.

For instance:

https://android-arsenal.com/details/1/4897

You have complete instructions, but basically:

 mRecyclerView = new CdsRecyclerView(this); mRecyclerView = (CdsRecyclerView) findViewById(R.id.recyclerView); mRecyclerView.setHasFixedSize(true); mRecyclerView.setLayoutManager(new LinearLayoutManager(this)); // Adapter: mRecyclerViewAdapter = new RecyclerViewAdapter(this, getData()); mRecyclerView.setAdapter(mRecyclerViewAdapter); // Enable swipe: mRecyclerView.enableItemSwipe(); // Listener: mRecyclerView.setItemSwipeCompleteListener(new CdsItemTouchCallback.ItemSwipeCompleteListener() { @Override public void onItemSwipeComplete(int position) { Toast.makeText(MainActivity.this, "Item was swiped:" + position, Toast.LENGTH_SHORT).show(); } }); 
+1
source

Source: https://habr.com/ru/post/1265446/


All Articles