Попытка добавить функцию поиска в мой ListView во фрагменте.У меня есть класс адаптера ListView из учебника, который добавляет изображение (первая буква элемента в виде значка).Когда я печатаю в поле поиска, ничего не происходит.Ниже приведен мой упрощенный фрагмент кода, где проблема возникает (я думаю):
private View view;
private ListView instrumentListView;
private SearchView searchinstrumentText;
private String[] instrumentItems={"1", "2", "3", "4", "5"};
private ArrayList<String> instrumentList;
private ArrayAdapter instrumentAdapter;
public InstrumentListFragment(){
// Required empty public constructor
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle
savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_instrumentlist, container,
false);
final ListView instrumentView = (ListView)
view.findViewById(R.id.instrumentListView);
SearchView searchinstrumentText=(SearchView)
view.findViewById(R.id.searchinstrumentText);
//The following is a custom adapter!
final ArrayList<String> instrumentList = new ArrayList<String>();
instrumentList.addAll( Arrays.asList(instrumentItems));
final ArrayAdapter instrumentAdapter = new ListAdapter(getActivity(),
R.layout.custom_listview, instrumentList);
instrumentView.setAdapter(instrumentAdapter);
//SEARCH
searchinstrumentText.setQueryHint("Search");
searchinstrumentText.setOnQueryTextListener(new
SearchView.OnQueryTextListener() {
@Override
public boolean onQueryTextSubmit(String txt) {
return false;
}
@Override
public boolean onQueryTextChange(String txt) {
instrumentAdapter.getFilter().filter(txt);
return false;
}
});
return view;
}
, а вот мой XML:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
tools:context=".InstrumentListFragment"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@drawable/bg_fragment">
<SearchView
android:id="@+id/searchinstrumentText"
style="@style/TextEdit"
android:ems="10"
android:hint="Search" />
<ListView
android:id="@+id/instrumentListView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@+id/searchinstrumentText"
android:layout_marginTop="1dp" />
</RelativeLayout>
, а вот класс Adapter:
public class ListAdapter extends ArrayAdapter<String> {
Context context;
List<String> instrumentList;
List<String> methodsList;
public ListAdapter(@NonNull Context context, @LayoutRes int resource,
List<String> list) {
super(context, resource,list);
this.context = context;
this.instrumentList = list;
this.methodsList = list;
}
@Override
public int getCount() {
return instrumentList.size();
}
@Nullable
@Override
public String getItem(int position) {
return instrumentList.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@NonNull
@Override
public View getView(int position, @Nullable View convertView, @NonNull
ViewGroup parent) {
ViewHolder viewHolder;
LayoutInflater inflater = (LayoutInflater)
context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
if (convertView == null){
convertView =
inflater.inflate(R.layout.custom_listview,parent,false);
viewHolder = new ViewHolder(convertView);
convertView.setTag(viewHolder);
}else{
viewHolder = (ViewHolder) convertView.getTag();
}
viewHolder.textView.setText(getItem(position));
String letters = String.valueOf(getItem(position).charAt(0));
ColorGenerator colorGenerator = ColorGenerator.MATERIAL;
int color = colorGenerator.getColor(getItem(position));
TextDrawable textDrawable = TextDrawable.builder()
.buildRound(letters,color);
viewHolder.imageView.setImageDrawable(textDrawable);
return convertView;
}
public class ViewHolder{
ImageView imageView;
TextView textView;
public ViewHolder(View iteView) {
imageView = iteView.findViewById(R.id.image_view);
textView = iteView.findViewById(R.id.text_view);
}
}
}
Я был бы очень признателен, если бы я был новичком в разработке приложений.Заранее спасибо, Эдвард