"New" message in my RecyclerView

2

I have a RecyclerView that I fill in with the data that I store in Firebase , what I try to do is that when a new item is added, a text like for example new

Something like this:

How can I do this?

NombresAdapter

public class NombresAdapter extends RecyclerView.Adapter<NombresAdapter.MyViewHolder> {

    private final Context mContext;
    DatabaseReference databaseReference = FirebaseDatabase.getInstance().getReference();
    private List<Nombres> nombresList = new ArrayList<>();

    public NombresAdapter(Context context) {
        mContext = context;
    }

    public void setData(List<Nombres> nombres) {
        nombresList.clear();
        nombresList.addAll(nombres);
        notifyDataSetChanged();
    }

    @Override
    public NombresAdapter.MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.nombres_list_item, parent, false);
        return new MyViewHolder(v);
    }

    @Override
    public void onBindViewHolder(final NombresAdapter.MyViewHolder holder, final int position) {
        final Nombres nombres = nombresList.get(position);

        holder.myTextView.setText(nombres.getDatosnombres());
        holder.itemView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Toast.makeText(mContext, " " + nombresList.get(position).toString(), Toast.LENGTH_SHORT).show();
            }
        });
        holder.myButtonDelete.setText("Delete");


        holder.myButtonDelete.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                databaseReference.child("Nombres").addListenerForSingleValueEvent(new ValueEventListener() {
                    @Override
                    public void onDataChange(DataSnapshot dataSnapshot) {
                        for (DataSnapshot snapshot : dataSnapshot.getChildren()) {
                            Nombres nombresTemp = snapshot.getValue(Nombres.class);
                            if (nombres.getDatosnombres().equals(nombresTemp.getDatosnombres())) {
                                databaseReference.child("Nombres").child(snapshot.getKey().toString()).removeValue();
                                nombresList.remove(position);
                                notifyDataSetChanged();
                                if (nombresList.size() == 0) {
                                    MainActivity.textViewEmptyView.setVisibility(View.VISIBLE);
                                }
                                break;

                            }

                        }

                    }

                    @Override
                    public void onCancelled(DatabaseError databaseError) {

                    }
                });
            }
        });
    }

    @Override
    public int getItemCount() {
        return nombresList.size();
    }

    public static class MyViewHolder extends RecyclerView.ViewHolder {

        public TextView myTextView;
        public Button myButtonDelete;

        public MyViewHolder(View itemView) {
            super(itemView);
            myTextView = (TextView) itemView.findViewById(R.id.tvDatosnombres);
            myButtonDelete = (Button) itemView.findViewById(R.id.deleteButton);
        }
    }
}

Activity :

    public RecyclerView recyclerListView;
    public NombresAdapter myAdapter;
    public static TextView textViewEmptyView;
    DatabaseReference databaseReference;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        textViewEmptyView = (TextView) findViewById(R.id.tvEmptyView);
        recyclerListView = (RecyclerView) findViewById(R.id.recylerview_list);

        textViewEmptyView = (TextView) findViewById(R.id.tvEmptyView);
        recyclerListView=(RecyclerView) findViewById(R.id.recylerview_list);
        recyclerListView.setLayoutManager(new LinearLayoutManager(this));
        myAdapter= new NombresAdapter(this);
        recyclerListView.setAdapter(myAdapter);

        databaseReference= FirebaseDatabase.getInstance().getReference();
        updateAdapter();}

    public void updateAdapter(){

        final List<Nombres> listNombres= new ArrayList<>();
        databaseReference.child("Nombres").addChildEventListener(new ChildEventListener() {
            @Override
            public void onChildAdded(DataSnapshot dataSnapshot, String s) {
                listNombres.add(dataSnapshot.getValue(Nombres.class));
                displayNombres(listNombres);
            }

            @Override
            public void onChildChanged(DataSnapshot dataSnapshot, String s) {
                updateAdapter();
            }

            @Override
            public void onChildRemoved(DataSnapshot dataSnapshot) {
            }

            @Override
            public void onChildMoved(DataSnapshot dataSnapshot, String s) {

            }

            @Override
            public void onCancelled(DatabaseError databaseError) {

            }
        });
    }

    //display the nombres on Adapter
    public void displayNombres(List<Nombres> ls){

        textViewEmptyView.setVisibility(View.GONE);
        recyclerListView.setVisibility(View.VISIBLE);

        myAdapter.setData(ls);
        myAdapter.notifyDataSetChanged();
    }
    @Override
    protected void onDestroy() {
        super.onDestroy();
    }

}
    
asked by UserNameYo 30.05.2017 в 21:43
source

1 answer

1

I think the question is a bit wide, but what you need is to add that attribute in your% share% of a value and when you read the object show the text in red.

You add the getter and setter of the attribute:

private boolean esNuevo;

 public boolean getEsNuevo() { 
       return esNuevo;  
    }

 public void setEsNuevo(boolean esNuevo) { 
       this.esNuevo = esNuevo;  
    }

To show it depending on the attribute, you can do it inside onBindViewHolder () depending on the value of the field you determine to show it or not show it:

 public void onBindViewHolder(final NombresAdapter.MyViewHolder holder, final int position) {
        final Nombres nombres = nombresList.get(position);

        holder.textViewNuevo.setVisibility(nombres.getEsNuevo()==true? View.VISIBLE:View.GONE));
...
...
    
answered by 31.05.2017 / 02:11
source