RecycleView不会更新

时间:2016-03-30 12:17:56

标签: java android

我还是Java和android的新手

我的问题是,如果我关闭应用并再次运行,则仅会更新recycleview并添加新添加的标记。如何让应用程序立即更新回收视图以显示新标记。

java代码

 package com.deitel.favoritesites;

import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;

import java.util.List;


public class SitesAdapter extends RecyclerView.Adapter<SitesAdapter.ViewHolder> {
private final View.OnClickListener clickListener;
private final View.OnLongClickListener longClickListener;

private final List<String> tags;


public SitesAdapter(List<String> tags, View.OnClickListener clickListener, View.OnLongClickListener longClickListener) {
    this.tags = tags;
    this.clickListener = clickListener;
    this.longClickListener = longClickListener;
}

public static class ViewHolder extends RecyclerView.ViewHolder {
    public final TextView textView;

    public ViewHolder(View itemView, View.OnClickListener clickListener, View.OnLongClickListener longClickListener) {
        super(itemView);
        textView = (TextView) itemView.findViewById(R.id.textView);

        itemView.setOnClickListener(clickListener);
        itemView.setOnLongClickListener(longClickListener);
    }
}

@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
    View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.list_item, parent, false);
    return (new ViewHolder(view, clickListener, longClickListener));

}

@Override
public void onBindViewHolder(ViewHolder holder, int position) {
    holder.textView.setText(tags.get(position));
}

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

这是我的采用者代码

function myMove() {
  var elem = document.getElementById("animate");
  var pos = 0;
  var id = setInterval(frame, 5);
  var changeVal = 1;

  function frame() {
      pos+=changeVal;
      if ((pos >= 350) || (pos <= 0)) changeVal *= -1;
      elem.style.top = elem.style.left = pos + 'px';
  }
}

3 个答案:

答案 0 :(得分:0)

将您的代码更改为....

//add new search to file then refresh all button
private void addTaggedSites(String tag, String query) {
    //get a sharedprefrence editor to store new tag/query pair
    SharedPreferences.Editor preferencesEditor = savedSites.edit();
    preferencesEditor.putString(tag, query);
    preferencesEditor.apply();

    //if tag is new> add and sort tags then display update
    if (!this.tag.contains(tag)) {
        this.tags.add(tag);
        Collections.sort(tags, String.CASE_INSENSITIVE_ORDER);
        adapter.notifyDataSetChanged();
    }
}

答案 1 :(得分:0)

将您的代码更改为此

if (!tags.contains(tag)) {
        tags.add(tag);
        Collections.sort(tags, String.CASE_INSENSITIVE_ORDER);
        adapter.notifyDataSetChanged();
    }

因为,以下条件总是假的

if(!tag.contains(tag))

因为您正在检查值是否包含在该值中。所以它永远是真的。

如果您正在检查tag中存在的List<String> tags,则应在下面执行此操作。

if(!tags.contains(tag))

答案 2 :(得分:0)

这可能有所帮助:

  1. 在适配器中创建一个setter方法,允许您设置/更新适配器ArrayList。

  2. 每当您对列表进行更改,即删除Tag时,请通过新的setter方法将此更新列表传递给适配器。

  3. 调用notifyDataSetChanged()。