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