android - 执行搜索后没有得到正确的结果
问题描述
这是我的片段,类似于 MainActivity :
public class cgpa_frag extends Fragment {
RecyclerView recyclerview;
adapter_cgpa ac;
ArrayList<POJO> cgpaArrayList = new ArrayList<>();
public cgpa_frag() {
// Required empty public constructor
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
setHasOptionsMenu(true);
View view = inflater.inflate(R.layout.fragment_cgpa_frag, container, false);
recyclerview = (RecyclerView) view.findViewById(R.id.rc2);
cgpaArrayList = new ArrayList<>();
ac = new adapter_cgpa(cgpaArrayList);
recyclerview.setLayoutManager(new LinearLayoutManager(getContext(), RecyclerView.VERTICAL, false));
recyclerview.setAdapter(ac);
Fetchdata2();
return view;
}
private void Fetchdata2() {
dbmanager db = new dbmanager(getContext());
Cursor cursor = db.fetch_data2();
if (cursor != null) {
// cursor.moveToFirst();
while (cursor.moveToNext()) {
POJO pj = new POJO();
pj.setCname(cursor.getString(0));
pj.setNo_of_sems(cursor.getString(1));
pj.setCgpa(cursor.getString(2));
pj.setPercentage(cursor.getString(3));
pj.setSchemec(cursor.getString(4));
cgpaArrayList.add(pj);
}
ac = new adapter_cgpa(cgpaArrayList);
}
}
@Override
public void onCreateOptionsMenu(@NonNull Menu menu, @NonNull MenuInflater inflater) {
super.onCreateOptionsMenu(menu, inflater);
inflater.inflate(R.menu.search_menu, menu);
MenuItem searchItem = menu.findItem(R.id.action_search);
SearchView searchView = (SearchView) searchItem.getActionView();
searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
@Override
public boolean onQueryTextSubmit(String query) {
return false;
}
@Override
public boolean onQueryTextChange(String newText) {
ac.getFilter().filter(newText);
return false;
}
});
}
}
这是我的适配器类:
public class adapter_cgpa extends RecyclerView.Adapter<adapter_cgpa.Viewholder> implements Filterable {
ArrayList<POJO> cgpaArrayList;
ArrayList<POJO> cgpaArrayListcopy;
public adapter_cgpa(ArrayList<POJO> cgpaArrayList) {
this.cgpaArrayList = cgpaArrayList;
cgpaArrayListcopy = new ArrayList<>(cgpaArrayList);
}
@NonNull
@Override
public adapter_cgpa.Viewholder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View listitem = LayoutInflater.from(parent.getContext()).inflate(R.layout.recycler_cgpa, parent, false);
return new Viewholder(listitem);
}
@Override
public void onBindViewHolder(@NonNull adapter_cgpa.Viewholder holder, int position) {
POJO cgpa= cgpaArrayList.get(position);
holder.cname.setText(cgpa.getCname());
holder.no_of_sems.setText(cgpa.getNo_of_sems());
holder.cgpa.setText(cgpa.getCgpa());
holder.percentage.setText(cgpa.getPercentage());
holder.schemec.setText(cgpa.getSchemec());
}
@Override
public int getItemCount() {
return cgpaArrayList.size();
}
@Override
public Filter getFilter() {
return exampleFilter;
}
private Filter exampleFilter = new Filter() {
@Override
protected FilterResults performFiltering(CharSequence constraint) {
List<POJO>filteredList=new ArrayList<>();
if(constraint==null || constraint.length()==0){
filteredList.addAll(cgpaArrayListcopy);
}
else {
String filterPattern = constraint.toString().toLowerCase().trim();
for( POJO item : cgpaArrayListcopy){
if (item.getCname().toLowerCase().contains(filterPattern)){
filteredList.add(item);
}
}
}
FilterResults results=new FilterResults();
results.values=filteredList;
return results;
}
@Override
protected void publishResults(CharSequence constraint, FilterResults results) {
cgpaArrayList.clear();
cgpaArrayList.addAll((List)results.values);
notifyDataSetChanged();
}
};
public class Viewholder extends RecyclerView.ViewHolder {
TextView cname, no_of_sems, cgpa, percentage,schemec;
ImageButton btndelete2;
public Viewholder(@NonNull View itemView) {
super(itemView);
cname=(TextView)itemView.findViewById(R.id.name);
no_of_sems=(TextView)itemView.findViewById(R.id.no_of_sem);
cgpa=(TextView)itemView.findViewById(R.id.textView49);
percentage=(TextView)itemView.findViewById(R.id.textView55);
schemec=(TextView)itemView.findViewById(R.id.scheme2);
btndelete2=(ImageButton)itemView.findViewById(R.id.btndelete2);
btndelete2.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
final AlertDialog.Builder alert = new AlertDialog.Builder(v.getContext());
alert.setMessage("Are you sure you want to delete this?");
alert.setNegativeButton("Yes", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int whichButton) {
}
});
alert.setPositiveButton("No", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int whichButton) {
}
});
final AlertDialog dialogs = alert.create();
dialogs.show();
dialogs.getButton(androidx.appcompat.app.AlertDialog.BUTTON_NEGATIVE).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
delete(getAdapterPosition());
dialogs.dismiss();
}
});
dialogs.getButton(androidx.appcompat.app.AlertDialog.BUTTON_POSITIVE).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
dialogs.dismiss();
}
});
}
});
}
private void delete(int adapterPosition) {
cgpaArrayList.remove(adapterPosition);
notifyDataSetChanged();
final String snc = cname.getText().toString();
final String semrc = no_of_sems.getText().toString();
final String schc = schemec.getText().toString();
dbmanager db = new dbmanager(itemView.getContext());
db.delete2(snc, semrc, schc);
}
}
}
这是 search_menu.xml:
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<item android:id="@+id/action_search"
android:icon="@drawable/ic_search"
android:title="Search by name..."
app:showAsAction="ifRoom|collapseActionView"
app:actionViewClass="android.widget.SearchView" />
</menu>
我总是只得到第一个数据作为输出,而不管我正在搜索的任何数据。
这是我的回收站观点:
这就是我在搜索后得到的:
有人可以告诉我我哪里出错了吗?
我已经参考了这个视频: https ://codinginflow.com/tutorials/android/searchview-recyclerview
解决方案
只需在 RecyclerView 之前添加 SearchView,并配置它
推荐阅读
- bash - 使用 bash 删除部分文件名
- oracle - 在 oracle 11G 中创建可以访问多个 Schema 的超级用户
- api - 成功登录后的 Azure AD B2C 重定向循环
- java - 如何从数据库(表)中获取计数并链接到 jsp 页面?
- css - 具有 flex-direction 列的父容器和具有 flex-direction 行的子容器
- python - 蛮力函数 SHA256 哈希
- ios - 将 UIImageView 添加到 ARSCNView 场景背景会导致饱和度/色调关闭
- vba - 访问问题中的VBA,字段被识别
- python - Python 只读取手动创建的文件
- image - 如何比较2张tiff图片的差异,生成新的tiff图片,并标注差异