【问题标题】:Recyclerview dataset update proper methodRecyclerview 数据集更新正确方法
【发布时间】:2017-05-05 04:48:35
【问题描述】:

为了更新recyclerview的数据我尝试了三种方法

  1. notifydatasetchanged()
  2. swapadapter()
  3. 更新List<> 并分配相同的适配器。

但是当我在每个方法中更新数据时内存分配(到应用程序)保持增加范围为(0.25 到 0.50)MB 如何解决?

我的适配器

public class RVAdapter extends RecyclerView.Adapter<RVAdapter.PersonViewHolder> {
public static int Sub;

public static class PersonViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {


    TextView personName;
    ImageView personPhoto;

    PersonViewHolder(View itemView) {
        super(itemView);
        itemView.setOnClickListener(this);
        personName = (TextView)itemView.findViewById(R.id.person_name);
        personPhoto = (ImageView)itemView.findViewById(R.id.person_photo);
    }

    @Override
    public void onClick(View view) {
        Sub = getLayoutPosition();
        Toast.makeText(view.getContext(), "position = " + getLayoutPosition(), Toast.LENGTH_SHORT).show();

    }}

List<Person> persons;
RVAdapter(List<Person> persons){
    this.persons = persons;
}

@Override
public void onAttachedToRecyclerView(RecyclerView recyclerView) {
    super.onAttachedToRecyclerView(recyclerView);
}

@Override
public PersonViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) {
    View v = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.raw, viewGroup, false);
    PersonViewHolder pvh = new PersonViewHolder(v);
    return pvh;
}

@Override
public void onBindViewHolder(PersonViewHolder personViewHolder, int i) {
    personViewHolder.personName.setText(persons.get(i).name);
    personViewHolder.personPhoto.setImageResource(persons.get(i).photoId);
}

@Override
public int getItemCount() {
    return persons.size();
}
public void swap(List<Person>persons){
    persons.clear();
    persons.add(new Person("htfg", R.mipmap.ic_launcher));//0
    persons.add(new Person("fhe", R.mipmap.ic_launcher));//0
notifyDataSetChanged();

} }

【问题讨论】:

  • 发布您的 RecyclerView 适配器。
  • 我已经添加了

标签: android memory android-recyclerview


【解决方案1】:

使用 adapter.notifyItemChanged (itemPosition) 或任何其他 .notifyItem...() 本机适配器方法。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-25
    • 1970-01-01
    • 1970-01-01
    • 2016-11-25
    • 1970-01-01
    相关资源
    最近更新 更多