我在recyclerview设置了fragment。我使用了searchview来过滤recyclerview中的项目。当我开始输入时,recyclerview中的项目已设置好searchview并显示已过滤的列表项 这是适配器
的代码public class NewAdapter extends RecyclerView.Adapter<NewAdapter.ViewHolder> {
ArrayList<CurrentEntry> listItems,filterList;
Context context;
FragmentManager fm;
FragmentTransaction tx;
public void filter(String newText) {
filterList.clear();
if(TextUtils.isEmpty(newText))
{
filterList.addAll(listItems);
}
else
{
for(CurrentEntry entry:listItems)
{
if(entry.getName().toLowerCase().contains(newText))
filterList.add(entry);
}
}
// notifyDataSetChanged();
}
public NewAdapter (ArrayList<CurrentEntry> listItems, Context context) {
this.listItems = listItems;
this.context = context;
this.filterList=new ArrayList<CurrentEntry>();
this.filterList.addAll(this.listItems);
}
@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View v= LayoutInflater.from(parent.getContext())
.inflate(R.layout.list_card,parent,false);
return new ViewHolder(v);
}
@Override
public void onBindViewHolder(ViewHolder holder, int position) {
final CurrentEntry current=filterList.get(position);
// holder.number.setText(current.getNo());
holder.Name.setText(current.getName());
holder.People.setText(current.getPeople());
holder.Estimate.setText(current.getEstimate());
holder.itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String name=current.getName();
String people=current.getPeople();
String estimate=current.getEstimate();
Bundle args=new Bundle();
args.putString("name",name);
args.putString("people",people);
args.putString("estimate",estimate);
UserSatusInfo satusInfo=new UserSatusInfo();
satusInfo.setArguments(args);
AppCompatActivity activity=(AppCompatActivity)v.getContext();
activity.getSupportFragmentManager().beginTransaction().replace(R.id.frame,satusInfo).addToBackStack("info").commit();
Toast.makeText(v.getContext(),name,Toast.LENGTH_SHORT).show();
Log.i("name",name);
}
});
// holder.Foodie.setText(current.getFoodie());
}
public class ViewHolder extends RecyclerView.ViewHolder {
// TextView number;
TextView Name ;
TextView People;
TextView Estimate;
// TextView Foodie;
public ViewHolder(View itemView) {
super(itemView);
Name=(TextView)itemView.findViewById(R.id.name);
People=(TextView)itemView.findViewById(R.id.people);
Estimate=(TextView)itemView.findViewById(R.id.estimate);
// Foodie=(TextView)itemView.findViewById(R.id.foodie);
//itemView.setOnClickListener(this);
}
}
@Override
public int getItemCount() {
// return filterList.size();
return (null!=filterList ? filterList.size():0);
}
}
这是设置RecyclerView
的代码 @Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
View v=inflater.inflate(R.layout.current_status,container,false);
FloatingActionButton fab=(FloatingActionButton)v.findViewById(R.id.fab);
prefs=getActivity().getPreferences(Context.MODE_PRIVATE);
name=prefs.getString("name","empty");
pass=prefs.getString("pass","empty");
search=(SearchView) v.findViewById(R.id.search);
recyclerView=(RecyclerView)v.findViewById(R.id.recyclerView);
getData();
recyclerView.setHasFixedSize(true);
recyclerView.setLayoutManager(new LinearLayoutManager(getActivity()));
adapt=new NewAdapter(current,getActivity().getApplicationContext());
// recyclerView.setAdapter(adapt);
search.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
@Override
public boolean onQueryTextSubmit(String query) {
return false;
}
@Override
public boolean onQueryTextChange(String newText) {
adapt.filter(newText);
return true;
}
});
fm=getFragmentManager();
fab.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String tag="one";
tx=fm.beginTransaction();
fm.popBackStack();
fm.popBackStack();
tx.replace(R.id.frame,new Check(),tag);
tx.addToBackStack(tag);
// tx.remove();
tx.commit();
}
});
return v;
}
如何解决这个问题。 这是getRequest。
private void getData() {
String json_req = "json_req";
//String url =getContext().getString(R.string.CURRENT+"?limit="+100_STATUS);
String url="";
JsonObjectRequest req = new JsonObjectRequest(Request.Method.GET, url, null,
new Response.Listener<JSONObject>() {
@Override
public void onResponse(JSONObject response) {
try
{
JSONObject object=new JSONObject(response.toString());
// String count= object.getString("count");
JSONArray data=object.getJSONArray("results");
for( i=0;i<data.length();i++)
{
JSONObject json = data.getJSONObject(i);
final CurrentEntry c=new CurrentEntry();
userUrl=json.getString("name");
JsonObjectRequest request=new JsonObjectRequest(Request.Method.GET, userUrl, null, new Response.Listener<JSONObject>() {
@Override
public void onResponse(JSONObject response) {
try {
JSONObject temp=response.getJSONObject("user");
// JSONObject user=loginback.getJSONObject("user");
String foodie_name=temp.getString("first_name");
String lname=temp.getString("last_name");
c.setName(foodie_name+"\t"+lname);
} catch (JSONException e) {
e.printStackTrace();
}
// adapt.notifyDataSetChanged();
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
}
})
{
};
AppController.getInstance().addToRequestQueue(request,second_req);
c.setPeople(json.getString("no_people"));
String temp=json.getString("predicated_t");
// loginback=loginback.substring(11);
// loginback=loginback.substring(0,loginback.length()-4);
c.setEstimate(temp+"min");
// c.setNo(count);
current.add(c);
// recyclerView.setAdapter(adapt);
}
recyclerView.setAdapter(adapt);
adapt.notifyDataSetChanged();
}
catch (JSONException e)
{
e.printStackTrace();
}
}
},
new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
}
})
{
};
AppController.getInstance().addToRequestQueue(req, json_req);
}