Recycler View不刷新

时间:2016-04-27 03:57:27

标签: android android-studio android-recyclerview

我正在做一个RecyclerView示例。问题是,当我在列表中添加第一个项目时,它会在recyclerview上正确显示该项目,但我添加的下一个项目未显示在回收视图上。

请帮帮我。

适配器代码是:

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

主要活动代码是:

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

2 个答案:

答案 0 :(得分:3)

尝试@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(); } 功能

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

<强>更新

在适配器代码中,尝试以下更改..

d = list()

for i in range(0,10):
    d.append(i)

print(d)

答案 1 :(得分:1)

在onClick中,您正在添加一个人,但是您没有通过调用适配器的更新方法将更新的列表传递给适配器。这可能是原因吗?