2016-11-05 3 views
0

У меня есть RecyclerView и его работа хорошая, но мне нужно реализовать фильтр для поиска в RecyclerView. Я ищу в Интернете, но я не могу добиться успеха, поэтому я хочу, чтобы кто-нибудь помог мне реализовать фильтр в моем RecyclerView, это мой код, пожалуйста, попробуйте чтобы помочь мнеКак реализовать фильтр для поиска в RecyclerView Android?

это RecyclerView активность

public class TodoList extends AppCompatActivity implements DialogFragUpdateListener { 
    RecyclerView todoRecyclerView; 
    private RecyclerView.Adapter todoAdapter; 
    private RecyclerView.LayoutManager todoLayoutManager; 
    public List<ToDo> results; 
    public List<String> list = new ArrayList<>(); 
    TodoRecyclerAdapter recyclerAdapter; 
    Context context; 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_todo_list); 

     todoRecyclerView = (RecyclerView)findViewById(R.id.todoRecyclerView); 
     todoRecyclerView.setHasFixedSize(true); 
     results= new ArrayList<ToDo>(); 
     todoLayoutManager = new LinearLayoutManager(this); 
     todoRecyclerView.setLayoutManager(todoLayoutManager); 
getRetrofitObject(); 
     FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab); 
     fab.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       Intent intent = new Intent(TodoList.this,AddToDo.class); 
       startActivity(intent); 
      } 
     });} 

    public void getRetrofitObject() { 
     Retrofit retrofit = new Retrofit.Builder() 
       .baseUrl(BASE_URL) 
       .addConverterFactory(GsonConverterFactory.create()) 
       .build(); 
     APIService service = retrofit.create(APIService.class); 
     Call<Result> call = service.getresults(); 
     call.enqueue(new Callback<Result>() { 
      @Override 
      public void onResponse(Call<Result> call, Response<Result> response) { 
       results = response.body().getResults(); 
       todoRecyclerView.setAdapter(new TodoRecyclerAdapter(this,results)); 
      } 
      @Override 
      public void onFailure(Call<Result> call, Throwable t) { 
       Log.d("onFailure", t.toString()); 
      }});} 
public boolean onCreateOptionsMenu(Menu menu) { 
     getMenuInflater().inflate(R.menu.menu_search, menu); 
     MenuItem searchItem = menu.findItem(R.id.action_search); 
     SearchView searchView = (SearchView) MenuItemCompat.getActionView(searchItem); 
     searchView.setOnQueryTextFocusChangeListener(new View.OnFocusChangeListener() { 

      @Override 
      public void onFocusChange(View v, boolean hasFocus) { 

      } 
     }); 

     searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() { 

      @Override 
      public boolean onQueryTextSubmit(String query) { 

       return true; 
      } 

      @Override 
      public boolean onQueryTextChange(String searchQuery) { 

       return true; 

      } 
     }); 
     MenuItemCompat.setOnActionExpandListener(searchItem, new MenuItemCompat.OnActionExpandListener() { 
      @Override 
      public boolean onMenuItemActionCollapse(MenuItem item) { 
       return true; 
      } 
      @Override 
      public boolean onMenuItemActionExpand(MenuItem item) { 
       return true; 
      } 
     }); 
     return true; 
    } 

и это адаптер

public class TodoRecyclerAdapter extends RecyclerView.Adapter<TodoRecyclerAdapter.ViewHolder> { 

static List<ToDo> todoResults; 
static Context context; 
List<String> results; 
private List<ToDo> orig; 
private List<ToDo> items; 
private ArrayList<ToDo> arrayList = null, stringArrayList; 


public TodoRecyclerAdapter(Callback<Result> callback, List<ToDo> results) { 
    this.todoResults = results; 
    arrayList = (ArrayList<ToDo>) results; 

} 



@Override 
public TodoRecyclerAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 
    View itemLayoutView = LayoutInflater.from(parent.getContext()).inflate(R.layout.todo_items, null); 
    ViewHolder viewHolder = new ViewHolder(itemLayoutView); 
    return viewHolder; 
} 

@Override 
public void onBindViewHolder(final TodoRecyclerAdapter.ViewHolder holder, final int position) { 
    holder.todoTitle.setText(todoResults.get(position).getTODO_TITLE().toString()); 
    String priority = todoResults.get(position).getPriority().toString(); 
    if (priority.equals("Low")) { 
     holder.todoImage.setImageResource(R.drawable.low); 
    } else if (priority.equals("Normal")) { 
     holder.todoImage.setImageResource(R.drawable.normal); 
    } else if (priority.equals("High")) { 
     holder.todoImage.setImageResource(R.drawable.high); 
    } 
} 

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

public static class ViewHolder extends RecyclerView.ViewHolder { 
    public TextView todoTitle; 
    public ImageView todoImage; 

    public ViewHolder(View itemLayoutView) { 
     super(itemLayoutView); 
     todoTitle = (TextView) itemLayoutView.findViewById(R.id.todo_title); 
     todoImage = (ImageView) itemLayoutView.findViewById(R.id.imageView2); 
    } 
} 

Пожалуйста, попробуйте помочь мне, потому что этот метод от основных функционально в моем приложении

+0

Добро пожаловать в Stack Overflow! Ознакомьтесь с нашим [Контрольным списком вопросов] (http://meta.stackoverflow.com/questions/260648/stack-overflow-question-checklist), чтобы помочь вам задать хороший вопрос и, таким образом, получить хороший ответ. –

+0

спасибо, я просмотрю его :) и если у вас есть представление о моей проблеме, пожалуйста, скажите мне :) –

ответ

0

Вы можете использовать your_adapter.getFilter(). Фильтр (SearchQuery) в onQueryTextChange.

+0

getFilter() ?? как объявить этот метод? –

+0

не нужно определять. Это уже есть. –

+0

Это часть класса адаптера массива. вы просто должны использовать его. –

0

попробовать recyclerAdapter.getFilter(). Фильтр (SearchQuery) в вашем ToDoList классе активность

Но если вы пытаетесь сделать что-то вроде этого Action bar search

+0

когда я, но это, 'todoAdapter.getFilter(). Filter (searchQuery);' не может reslove getFilter() –

+0

Я вижу пример, но я не могу подать заявку на мой случай, можете ли вы применить это для меня ??? –

Смежные вопросы