사용자 지정 목록에서 SearchView를 사용하고 있습니다. 매번 동일한 결과 (목록의 첫 번째 항목)가 표시됩니다. 그래서 저는 Google의 Gauva Filter를 사용하려고하는데 필터 후 결과를 기록 할 때 잘 작동합니다. 하지만 이제는 내 목록보기와 통합하는 방법을 모르겠습니다.
다음은 CustomList.java 패키지 com.jarvis.easysplay.adapter의 코드입니다 .
public class CustomList extends ArrayAdapter implements Filterable{
private String[] names;
private String[] desc;
private Integer[] imageid;
private Activity context;
public CustomList(Activity context, String[] names, String[] desc) {
super(context, R.layout.list_item, names);
this.context = context;
this.names = names;
this.desc = desc;
// this.imageid = imageid;
}
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
LayoutInflater inflater = context.getLayoutInflater();
View listViewItem = inflater.inflate(R.layout.song_list_layout, null, true);
TextView textViewName = (TextView) listViewItem.findViewById(R.id.song_title);
TextView textViewDesc = (TextView) listViewItem.findViewById(R.id.song_author);
ImageView image = (ImageView) listViewItem.findViewById(R.id.imageView);
// TextView options = (TextView) listViewItem.findViewById(R.id.options);
//Set Data
textViewName.setText(names[position]);
textViewDesc.setText(desc[position]);
return listViewItem;
}
@NonNull
@Override
public Filter getFilter() {
return super.getFilter();
}
}
그리고 이것은 내 검색 필터 코드입니다.
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
inflater.inflate(R.menu.music_search, menu);
MenuItem searchItem = menu.findItem(R.id.music_search_bar);
SearchView searchView = (SearchView) searchItem.getActionView();
searchView.setQueryHint("Search Song");
searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
@Override
public boolean onQueryTextSubmit(String query) {
return true;
}
@Override
public boolean onQueryTextChange(String newText) {
// SongFragment.this.customList.getFilter().filter(newText); //I used this but it is not working
List<String> list = new ArrayList<>();
list.addAll(arrayList);
List<String> filteredList = Lists.newArrayList(Collections2.filter(
list, Predicates.contains(Pattern.compile(newText,Pattern.CASE_INSENSITIVE))));
String[] stringArray = filteredList.toArray(new String[0]);
CustomList custom = new CustomList(getActivity(),stringArray,stringArray);
custom.getFilter().filter(newText);
Log.d("searchResult",filteredList.toString());
return false;
}
});
super.onCreateOptionsMenu(menu, inflater);
}
아무도 내 코드에서 Google의 Guava를 어떻게 사용할 수 있는지 또는 Google의 Guava 필터를 사용하지 않고 사용하여 올바른 결과를 얻는 방법을 말해 줄 수 있습니까? 나는 너무 많은 Google을했고 또한 많은 솔루션을 시도했지만 작동하지 않았습니다.
새 CustomList
어댑터를 만들고 있지만이 어댑터로 아무 작업도 수행하지 않습니다. ListView 또는 사용중인 AdapterView에 새 어댑터를 설치해야합니다. ListView를 사용하는 경우 ListView.setAdapter(custom)
. Filterable
Guava를 사용한 필터링 과 필터링을 혼합하고 일치시킬 필요가 없을 것입니다 .
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다