recyclerview llenar firebaserecycleradapter con android firebase firebase-database android-recyclerview

android - llenar - firebaserecycleradapter



Cómo deslizar para eliminar en RecyclerView? (2)

Lo que tengo aquí es una página de Historial que muestra las solicitudes que el usuario ha aceptado o publicado. Pude poner con éxito un botón para que el usuario elimine todo el historial que tiene el usuario. Ahora quiero que el usuario pueda borrar un historial de uno en uno deslizándolo.

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); }

Realmente no he intentado nada porque las otras preguntas que he visto aquí hasta ahora no parecen ser similares a mis códigos.


Es bastante simple y puedes hacerlo sin usar ninguna biblioteca de terceros también.

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

Y ahora la devolución de llamada,

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); } };

Ahora puede identificar cuál de sus artículos ha sido eliminado. Puede eliminar el elemento de su adaptador y puede notifyDataSetChanged() .


Tendrá que usar una biblioteca / widget existente a menos que desee crear la funcionalidad desde cero.

Por ejemplo:

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

Tienes instrucciones completas allí, pero básicamente:

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(); } });