【发布时间】:2019-07-31 19:32:24
【问题描述】:
尝试在片段中向我的 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>
这是适配器类:
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);
}
}
}
我非常感谢一些指导,因为我是应用程序开发的新手。 先感谢您, 爱德华
【问题讨论】:
-
ListAdapter长什么样子? -
我进行了编辑并将其包含在帖子中。我不完全理解它,但它有效。
标签: android xml search fragment searchview