Hugo
Hugo

Reputation: 33

Recycler View Not Refreshing

I'm doing a RecyclerView example. The thing is that when I add the first item on the list it shows the item correctly on the recyclerview but the next items I add aren't showing on the recycle view.

Please help me.

Adapter code is:

public class PersonAdapter extends RecyclerView.Adapter<PersonAdapter.PersonViewHolder> {
private ArrayList<Person> mData;
LayoutInflater inflater;

public PersonAdapter() {
}

public PersonAdapter(Context context, ArrayList<Person> data) {
    inflater = LayoutInflater.from(context);
    update(data);
}

public void update(ArrayList<Person> data) {
    mData = data;
    notifyDataSetChanged();
}

@Override
public PersonViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
    View view = inflater.inflate(R.layout.custom_row, parent, false);
    PersonViewHolder holder = new PersonViewHolder(view);
    return holder;
}

@Override
public void onBindViewHolder(PersonViewHolder holder, int position) {
    Person person = mData.get(position);

    holder.ivImagen.setImageResource(R.drawable.ic_action_android);
    holder.tvNombre.setText(person.getName());
    holder.tvApellido.setText(person.getLast_name());
}

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

public static class PersonViewHolder extends RecyclerView.ViewHolder {
    ImageView ivImagen;
    TextView tvNombre;
    TextView tvApellido;

    public PersonViewHolder(View itemView) {
        super(itemView);
        ivImagen = (ImageView) itemView.findViewById(R.id.cr_iv_imagen);
        tvNombre = (TextView) itemView.findViewById(R.id.cr_tv_name);
        tvApellido = (TextView) itemView.findViewById(R.id.cr_tv_last_name);
    }
}}

Main Activity Code is:

public class MainActivity extends AppCompatActivity implements View.OnClickListener {
ArrayList<Person> persons = new ArrayList<>();
EditText et_name;
EditText et_last_name;
RecyclerView rv_names;
PersonAdapter adapter;
Button btAgregar;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    et_name = (EditText) findViewById(R.id.tv_name);
    et_last_name = (EditText) findViewById(R.id.tv_last_name);
    btAgregar = (Button) findViewById(R.id.bt_agregar);
    rv_names = (RecyclerView) findViewById(R.id.rv_nombres);

    LinearLayoutManager manager = new LinearLayoutManager(this);
    rv_names.setLayoutManager(manager);
    adapter = new PersonAdapter(this, persons);
    rv_names.setAdapter(adapter);

    btAgregar.setOnClickListener(this);
}

@Override
public void onClick(View v) {
    Person person = new Person(et_name.getText().toString(), et_last_name.getText().toString());
    persons.add(person);

    Toast.makeText(this, "Items: " + String.valueOf(persons.size()), Toast.LENGTH_SHORT).show();
}    }

Upvotes: 2

Views: 16436

Answers (3)

shaked428
shaked428

Reputation: 56

i just added called adapter.notifyDataSetChanged();

Upvotes: 1

Fabin Paul
Fabin Paul

Reputation: 1711

Try this code for onClick function

@Override
public void onClick(View v) {
Person person = new Person(et_name.getText().toString(), et_last_name.getText().toString());
persons.add(person);

adapter.update(persons);

Toast.makeText(this, "Items: " + String.valueOf(persons.size()), Toast.LENGTH_SHORT).show();
}   

UPDATE:

In Adapter code, try the following changes..

public void update(ArrayList<Person> data) {
mData.clear();
mData.addAll(data)
notifyDataSetChanged();
}

Upvotes: 4

Gerard Frijters
Gerard Frijters

Reputation: 358

In the onClick you are adding a person, but you are not passing the updated list to the adapter by calling the adapter's update method. Might this be the reason?

Upvotes: 1

Related Questions