我创建了回收站视图,并在其中显示了我从Firestore数据库中获取的数据。现在我在回收站上使用搜索视图,但是当我尝试搜索时出现错误
Adapter.java
package ui;
import android.content.Context;
import android.content.Intent;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Filter;
import android.widget.Filterable;
import android.widget.LinearLayout;
import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;
import part.time.job.v2.JobdescriptionActivity;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import model.Jobpost;
import part.time.job.v2.R;
public class JournalRecyclerAdapter extends RecyclerView.Adapter<JournalRecyclerAdapter.ViewHolder> implements Filterable {
private Context context;
private List<Jobpost> journalList;
private List<Jobpost> exampleListFull;
public JournalRecyclerAdapter(Context context, List<Jobpost> journalList) {
this.context = context;
this.journalList = journalList;
exampleListFull = new ArrayList<>(journalList);
}
@NonNull
@Override
public JournalRecyclerAdapter.ViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int viewType) {
View view= LayoutInflater.from(context)
.inflate(R.layout.journal_row, viewGroup, false);
return new ViewHolder(view, context);
}
@Override
public void onBindViewHolder(@NonNull JournalRecyclerAdapter.ViewHolder viewHolder, int position) {
final Jobpost jobpost= journalList.get(position);
viewHolder.title.setText(jobpost.getTitle());
viewHolder.loc.setText(jobpost.getLocation());
viewHolder.date.setText(jobpost.getJobdate());
viewHolder.linearLayout.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent i = new Intent(context, JobdescriptionActivity.class);
i.putExtra("title",jobpost.getTitle());
i.putExtra("desc",jobpost.getDesc());
i.putExtra("category",jobpost.getCategory());
i.putExtra("age",jobpost.getAge());
i.putExtra("vacancy",jobpost.getVacancy());
i.putExtra("location",jobpost.getLocation());
i.putExtra("Date",jobpost.getJobdate());
i.putExtra("time",jobpost.getTime());
i.putExtra("Workinghours",jobpost.getWorkinghour());
i.putExtra("Jobexpire",jobpost.getExpire());
i.putExtra("userid",jobpost.getUserId());
context.startActivity(i);
}
});
}
@Override
public int getItemCount() {
return journalList.size();
}
@Override
public Filter getFilter() {
return exampleFilter;
}
private Filter exampleFilter = new Filter() {
@Override
protected FilterResults performFiltering(CharSequence constraint) {
List<Jobpost> filteredList = new ArrayList<>();
if (constraint.toString().isEmpty()) {
filteredList.addAll(exampleListFull);
} else {
for (Jobpost item : exampleListFull) {
if (item.getTitle().contains(constraint.toString().toLowerCase())) {
filteredList.add(item);
}
}
}
FilterResults results = new FilterResults();
results.values = filteredList;
return results;
}
@Override
protected void publishResults(CharSequence constraint, FilterResults results) {
journalList.clear();
journalList.addAll((Collection<? extends Jobpost>) results.values);
notifyDataSetChanged();
}
};
public class ViewHolder extends RecyclerView.ViewHolder{
public TextView
title,
loc,
date;
LinearLayout linearLayout;
String userId;
public ViewHolder(@NonNull View itemView, Context ctx) {
super(itemView);
context = ctx;
title = itemView.findViewById(R.id.jobTitle);
loc = itemView.findViewById(R.id.locat);
date = itemView.findViewById(R.id.jobDate);
linearLayout=itemView.findViewById(R.id.linearLayout1);
}
}
}
java文件
package part.time.job.v2;
import android.os.Bundle;
import androidx.annotation.NonNull;
import androidx.appcompat.widget.SearchView;
import androidx.fragment.app.Fragment;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.view.inputmethod.EditorInfo;
import android.widget.TextView;
import com.google.android.gms.tasks.OnFailureListener;
import com.google.android.gms.tasks.OnSuccessListener;
import com.google.firebase.auth.FirebaseAuth;
import com.google.firebase.auth.FirebaseUser;
import com.google.firebase.firestore.CollectionReference;
import com.google.firebase.firestore.FirebaseFirestore;
import com.google.firebase.firestore.QueryDocumentSnapshot;
import com.google.firebase.firestore.QuerySnapshot;
import java.util.ArrayList;
import java.util.List;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import model.Jobpost;
import ui.JournalRecyclerAdapter;
import util.JournalApi;
/**
* A simple {@link Fragment} subclass.
*/
public class AlljobFragment extends Fragment {
private FirebaseUser user;
private FirebaseAuth firebaseAuth;
private FirebaseAuth.AuthStateListener authStateListener;
private FirebaseFirestore db = FirebaseFirestore.getInstance();
private List<Jobpost> journalList;
private RecyclerView recyclerView;
private JournalRecyclerAdapter journalRecyclerAdapter;
private CollectionReference collectionReference=db.collection("Job Post1");
private TextView noJournalEntry;
public AlljobFragment() {
// Required empty public constructor
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
View view=inflater.inflate(R.layout.fragment_alljob, container, false);
firebaseAuth= FirebaseAuth.getInstance();
user =firebaseAuth.getCurrentUser();
setHasOptionsMenu(true);
noJournalEntry= view.findViewById(R.id.no_list);
journalList=new ArrayList<>();
recyclerView=view.findViewById(R.id.recyclerView);
recyclerView.setHasFixedSize(true);
recyclerView.setLayoutManager(new LinearLayoutManager(getActivity()));
return view;
}
@Override
public void onStart() {
super.onStart();
if (journalList!=null){
journalList.clear();
}
collectionReference.get()
.addOnSuccessListener(new OnSuccessListener<QuerySnapshot>() {
@Override
public void onSuccess(QuerySnapshot queryDocumentSnapshots) {
if (!queryDocumentSnapshots.isEmpty()){
for (QueryDocumentSnapshot journals: queryDocumentSnapshots){
// Journal journal=journals.toObject(Journal.class);
Jobpost jobpost=journals.toObject(Jobpost.class);
journalList.add(jobpost);
}
journalRecyclerAdapter = new JournalRecyclerAdapter(getActivity(),journalList);
recyclerView.setAdapter(journalRecyclerAdapter);
journalRecyclerAdapter.notifyDataSetChanged();
}else {
noJournalEntry.setVisibility(View.VISIBLE);
}
}
})
.addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
}
});
}
@Override
public void onCreateOptionsMenu(@NonNull Menu menu, @NonNull MenuInflater inflater) {
menu.clear();
inflater.inflate(R.menu.menu, menu);
MenuItem item = menu.findItem(R.id.action_search);
SearchView searchView = (SearchView) item.getActionView();
searchView.setImeOptions(EditorInfo.IME_ACTION_DONE);
searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
@Override
public boolean onQueryTextSubmit(String query) {
return false;
}
@Override
public boolean onQueryTextChange(String newText) {
journalRecyclerAdapter.getFilter().filter(newText);
return false;
}
});
}
}
你能告诉我我要去哪里错吗?
并且当我在适配器类publishResults()中添加了异常但在单击搜索视图时没有搜索数据
我使用了try and catch并成功了
private Filter exampleFilter = new Filter() {
@Override
protected FilterResults performFiltering(CharSequence constraint) {
List<Jobpost> filteredList = new ArrayList<>();
try { //here
if (constraint == null || constraint.length() == 0) {
filteredList.addAll(jobpostList1);
} else {
String filterPattern = constraint.toString().toLowerCase().trim();
for (Jobpost jobpost : jobpostList1) {
if (jobpost.getTitle().toLowerCase().contains(filterPattern) || jobpost.getLocation().toLowerCase().contains(filterPattern)) {
filteredList.add(jobpost);
}
}
}
}catch (NullPointerException e){ //here
System.out.print("NullPointerException Caught");
}
FilterResults results = new FilterResults();
results.values = filteredList;
return results;
}
@Override
protected void publishResults(CharSequence constraint, FilterResults results) {
journalList.clear();
journalList.addAll(((List) results.values));
notifyDataSetChanged();
}
};