0
Good night ! I am stuck in a problem, in this I have a list of items I receive from firebase, in this list I have visibly 3 attributes of the model class (idAtivity, title and time), thus, I would like the searchview I implemented to search a certain text that I populated in the arraylist of this object, in this case it may even be passing the fixed attribute/column, my codes:
public class AtividadesCriadasFragment extends Fragment implements SearchView.OnQueryTextListener {
//ATRIBUTOS
SearchView searchView;
private ListView listView;
private ArrayAdapter adapter;
private ArrayList<Atividade> atividadeArrayList;
private DatabaseReference reference;
private ValueEventListener valueEventListener;
String idUsuario;
public AtividadesCriadasFragment(){
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
View view = inflater.inflate(R.layout.fragment_atividades_criadas, container, false);
searchView = (SearchView) view.findViewById(R.id.id_search);
//Montando list view e adapter
atividadeArrayList = new ArrayList<>();
listView = (ListView) view.findViewById(R.id.lv_minhas_atividades);
adapter = new AtividadesCriadasAdapter(getActivity(), atividadeArrayList);
listView.setAdapter(adapter);
//ATÉ AQUI JÁ FOI CRIADO UMA LISTA QUE É APRESENTADA PARA O USUÁRIO
//Implementação do searchView
searchView.setOnQueryTextListener(this);
//*************** RECUPERANDO A LISTA DE ATIVIDADES CRIADAS POR ESSE USUÁRIO ************/
SharedPreferencesUser user = new SharedPreferencesUser(getActivity());
idUsuario = user.getIdentificador();
reference = ConfiguracaoFirebase.getReferenceFirebase()
.child("ATIVIDADES")
.child(idUsuario);
//Evento de consulta
valueEventListener = new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
//LIMPANDO A LISTA
atividadeArrayList.clear();
//Listando cada uma das atividades criadas pelo usuário
for (DataSnapshot dados: dataSnapshot.getChildren()){ //recupera os filhos do nó principal
Atividade atividade = dados.getValue(Atividade.class);
atividadeArrayList.add(atividade);
}
adapter.notifyDataSetChanged();
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
};
return view;
}
In this case, as you can see, the List array is populated according to the return I got from the Activity class. The methods of searchView
@Override
public boolean onQueryTextSubmit(String s) {
return false;
}
@Override
public boolean onQueryTextChange(String texto) {
//Atividade atividade = new Atividade();
adapter.getFilter().filter(texto);
return false;
}
And the Adapter that receives the information and inflates it on the screen for the user:
public class AtividadesCriadasAdapter extends ArrayAdapter<Atividade>{
//ATRIBUTOS
private ArrayList<Atividade> atividadeArrayList;
private Context context;
public AtividadesCriadasAdapter(@NonNull Context c, @NonNull ArrayList<Atividade> objects) {
super(c, 0, objects);
this.atividadeArrayList = objects;
this.context = c;
}
//METODO PARA EXIBIÇÃO DA LISTA
@NonNull
@Override
public View getView(int position, @Nullable View convertView, @NonNull ViewGroup parent) {
//Criando uma view do zero
View view = null;
//Validando a lista
if (atividadeArrayList != null){
//Inicializando o objeto para montagem das views
LayoutInflater inflater = (LayoutInflater) context.getSystemService(context.LAYOUT_INFLATER_SERVICE);
//Montando a view a partir do XML
view = inflater.inflate(R.layout.lista_suas_atividades, parent, false);
//Recuperando os elementos para exibição
TextView id = (TextView) view.findViewById(R.id.tvID_list);
TextView titulo = (TextView) view.findViewById(R.id.tvTitulo_list);
TextView tempo = (TextView) view.findViewById(R.id.tvTempo_list);
RoundedImageView imCategoria = (RoundedImageView) view.findViewById(R.id.im_categoria_list);
Atividade atividade = atividadeArrayList.get(position);
id.setText(atividade.getId());
titulo.setText(atividade.getTitulo());
tempo.setText(atividade.getTempo());
}
return view;
}
}
The way the code is, every time I enter any digit in the searchview it already Zera the results finding nothing, I wanted to at least search for the node . Child("ACTIVITIES"). Child("Idusuario"). Child("idAtivity") <- search by idAtivity for example, which in the activity class is the parameter 'id'.