【问题标题】:Recycler View Not Refreshing回收站视图不刷新
【发布时间】:2016-08-21 04:07:39
【问题描述】:

我正在做一个 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();
}    }

【问题讨论】:

  • 也添加您的 XML 代码。有时会在您设置RecycleView 高度时发生wrap_content
  • @Zahidul 这个问题在上次支持包更新中没有解决吗?

标签: android android-studio android-recyclerview


【解决方案1】:

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

【讨论】:

  • 正是这个原因
  • 你好杰拉尔多。添加项目后,我在 onClick 中添加了更新方法,但不起作用:( onClick 代码现在是:Person person = new Person(et_name.getText().toString(), et_last_name.getText().toString()); person.add(person); adapter.update(persons); Toast.makeText(this, "Items:" + String.valueOf(persons.size()), Toast.LENGTH_SHORT).show();
【解决方案2】:

试试这个代码onClick函数

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

【讨论】:

  • 你好 Fabin 我添加了一行:adapter.update(persons);但不起作用:(我在第一个项目之后添加的每个项目都没有显示在回收站视图中:(
  • 很高兴我能帮上忙...:)
【解决方案3】:

我刚刚添加了名为adapter.notifyDataSetChanged();

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-10-21
  • 2016-09-22
  • 1970-01-01
  • 2021-12-21
  • 1970-01-01
  • 1970-01-01
  • 2022-01-19
相关资源
最近更新 更多