在edittext中键入word时更新回收站(搜索)

时间:2018-07-22 13:32:56

标签: android android-recyclerview notifydatasetchanged

我想在编辑文本中写一个单词时,我的回收商会更新,但是例如,当我写(sample)时,我的列表等于word(sa)和(sample)。 我使用凌空从服务器获取数据。 我的代码:

public void get_search(String text) {
    JsonArrayRequest jsonObjectRequest = new JsonArrayRequest(Request.Method.GET, G.url_search + text, null, new Response.Listener<JSONArray>() {
            @Override
            public void onResponse(JSONArray response) {
                for (int i = 0; i < response.length(); i++) {
                    JSONObject jsonObject = null;
                    try {
                        Job job = new Job();
                        jsonObject = response.getJSONObject(i);
                        int job_lat = jsonObject.getInt("job_lat");
                        job.setJob_lng(job_lng);
                        list.add(job);

                    } catch (JSONException e) {
                        e.printStackTrace();
                    }
                    jobAdapter.setData(list);
                }

            }
        }, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError error) {


            }
        });
        requestQueue.add(jsonObjectRequest);
    }
}
searchView.addTextChangedListener(new TextWatcher() {
    @Override
            public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {

            }

            @Override
            public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {
                Log.i("log", "onTextChanged: " + charSequence.toString());
                get_search(charSequence.toString());

            }

            @Override
            public void afterTextChanged(Editable editable) {
            }
        });

和我的适配器代码:

   public class SearchAdapter extends RecyclerView.Adapter<SearchAdapter.ViewHolder> {
  private Context context;
  private List<Job> list;

  public SearchAdapter(Context context, List<Job> list) {
    this.context = context;
    this.list = list;

  }
public void setData(List<Job> list){
this.list = list;
notifyDataSetChanged();

}

  @Override
  public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
    View view = LayoutInflater.from(context).inflate(R.layout.search_index,parent,false);
    return new ViewHolder(view);
  }

  @Override
  public void onBindViewHolder(ViewHolder holder, int position) {
    Job job = list.get(position);
    holder.job_owner.setText(job.getJob_title());

  }

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

  public class ViewHolder extends RecyclerView.ViewHolder {
    TextView job_owner;

    public ViewHolder(View itemView) {
      super(itemView);
      job_owner = (TextView) itemView.findViewById(R.id.textViewName);
    }
  }
}

好的,我希望我的问题应该使用notifyDataSetChanged,但是我不在哪里使用它。

3 个答案:

答案 0 :(得分:0)

您的适配器中需要setData方法

public void setData(List<Job> list){
this.list = list;
notifyDataSetChanged();
}

在您的jsonObjectRequest onResponse

adapter.setData(list);

在您的list.clear()的第一行中添加onresponse

答案 1 :(得分:0)

我认为我们应该:

  • 实现 get_search 功能
  • 合成新结果后,我们必须通过调用 notifyDataSetChanged
  • 来更新适配器

祝你好运

答案 2 :(得分:0)

将此代码添加到第一行响应 list.clear(); 它起作用 感谢@ prashant17