Good, I have an APP that shows some information about Notices (Name of warning, description, location) and all this is saved in FireBase, I show the data with a RecyclerView and its CardView Adapter.
I use a PopupMenu to show the 2 options How can I make the Edit / Delete a Notice options?
My idea would be, to know in which position you click on the RecyclerView and to collect the Uid that you have and edit your data, some idea of how you could do it? How to know the position and open the correct Notice?
I leave here the code that I have to show the Data
public class VerAvisos extends MenuAvisos
{
FirebaseDatabase database = FirebaseDatabase.getInstance();
FirebaseUser user = firebaseAuth.getInstance().getCurrentUser();
List<Aviso> avisos;
RecyclerView rv;
AdaptadorAvisos adapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.recycler_avisos);
avisos = new ArrayList<>();
rv=(RecyclerView) findViewById(R.id.rvAvisos);
rv.setLayoutManager(new LinearLayoutManager(this));
adapter = new AdaptadorAvisos(this,avisos);
rv.setAdapter(adapter);
database.getReference("Aviso").child(user.getUid()).addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
avisos.clear();
for(DataSnapshot snapshot :
dataSnapshot.getChildren()){
Aviso aviso2 = snapshot.getValue(Aviso.class);
avisos.add(aviso2);
}
adapter.notifyDataSetChanged();
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
}
}
And its Adapter
public class AdaptadorAvisos extends RecyclerView.Adapter<AdaptadorAvisos.AvisosviewHolder> {
List<Aviso> avisos;
private Context mContext;
public static class AvisosviewHolder extends RecyclerView.ViewHolder {
TextView tvAviso;
TextView tvDescripcion;
TextView tvUbicacion;
public AvisosviewHolder(View itemView) {
super(itemView);
tvAviso = (TextView) itemView.findViewById(R.id.tvAviso);
tvDescripcion = (TextView) itemView.findViewById(R.id.tvDescripcion);
tvUbicacion = (TextView) itemView.findViewById(R.id.tvUbicacion);
}
}
public AdaptadorAvisos(Context mContext, List<Aviso> avisos)
{
this.mContext = mContext;
this.avisos = avisos;
}
@Override
public AvisosviewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.cardview_aviso, parent, false);
AvisosviewHolder holder = new AvisosviewHolder(v);
return holder;
}
@Override
public void onBindViewHolder(final AvisosviewHolder holder, int position) {
Aviso aviso = avisos.get(position);
holder.tvAviso.setText(aviso.getAviso());
holder.tvDescripcion.setText(aviso.getDescripcion());
holder.tvUbicacion.setText(aviso.getUbicacion());
holder.tvAviso.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
showPopupMenu(holder.tvAviso);
}
});
}
private void showPopupMenu(View v)
{
PopupMenu popup = new PopupMenu(mContext, v);
MenuInflater inflater = popup.getMenuInflater();
inflater.inflate(R.menu.menu_avisos, popup.getMenu());
popup.setOnMenuItemClickListener(new MyMenuItemClickListener());
popup.show();
}
class MyMenuItemClickListener implements PopupMenu.OnMenuItemClickListener{
public MyMenuItemClickListener(){
}
@Override
public boolean onMenuItemClick(MenuItem item) {
Intent intent = null;
switch (item.getItemId())
{
case R.id.action_eliminar:
Toast.makeText(mContext, "Eliminar Aviso (Test)", Toast.LENGTH_SHORT).show();
return true;
case R.id.action_editar:
Toast.makeText(mContext, "Editar Aviso (Test)", Toast.LENGTH_SHORT).show();
return true;
case R.id.action_volver:
intent = new Intent(mContext, Menu.class);
default:
}
mContext.startActivity(intent);
return true;
}
}
@Override
public int getItemCount() {
return avisos.size();
}
}