I have 2 spinner in my application, one populated with the name of the states that I registered in the database in the firebase and another with the cities, they are linked by the state ID.
I managed to get both of them popular, but I can not get the cities of São Paulo, for instance, by clicking on São Paulo.
package com.example.reinaldo.tcc.activity;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.EditText;
import android.widget.Spinner;
import android.widget.Toast;
import com.example.reinaldo.tcc.R;
import com.example.reinaldo.tcc.model.Cidades;
import com.example.reinaldo.tcc.model.Estados;
import com.google.firebase.database.DataSnapshot;
import com.google.firebase.database.DatabaseError;
import com.google.firebase.database.DatabaseReference;
import com.google.firebase.database.FirebaseDatabase;
import com.google.firebase.database.ValueEventListener;
import java.util.ArrayList;
import java.util.List;
import static com.example.reinaldo.tcc.model.Local.InserirLocalFirebase;
public class AdicionarLocalActivity extends AppCompatActivity {
private Spinner estado_spn;
private Spinner cidade_spn;
private ArrayAdapter<Estados> estadoArrayAdapter;
private ArrayAdapter<Cidades> cidadeArrayAdapter;
private ArrayList<Estados> estado;
private ArrayList<Cidades> cidade;
private DatabaseReference referencia = FirebaseDatabase.getInstance().getReference();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_adicionar_local);
initializeUI();
}
private void initializeUI() {
cidade_spn = findViewById(R.id.cidade_spn);
estado_spn = findViewById(R.id.estado_spn);
estado = new ArrayList<>();
cidade = new ArrayList<>();
Criarlista();
estadoArrayAdapter = new ArrayAdapter<Estados>(AdicionarLocalActivity.this, android.R.layout.simple_spinner_item, estado);
estadoArrayAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
estado_spn.setAdapter(estadoArrayAdapter);
cidadeArrayAdapter = new ArrayAdapter<Cidades>(AdicionarLocalActivity.this, android.R.layout.simple_spinner_item, cidade);
cidadeArrayAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
cidade_spn.setAdapter(cidadeArrayAdapter);
estado_spn.setOnItemSelectedListener(estado_listener);
cidade_spn.setOnItemSelectedListener(cidade_listener);
}
private AdapterView.OnItemSelectedListener estado_listener;
{
estado_listener = new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
parent.getItemAtPosition(position);
}
};
@Override
public void onNothingSelected(AdapterView<?> parent) {
}
};
}
private AdapterView.OnItemSelectedListener cidade_listener = new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
}
@Override
public void onNothingSelected(AdapterView<?> parent) {
}
};
private void Criarlista(){
referencia.child("CIDADES").addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
final List<String> cidade = new ArrayList<String>();
for (DataSnapshot cidadeSnapshot : dataSnapshot.getChildren()) {
String cidadeNome = cidadeSnapshot.child("Nome").getValue(String.class);
cidade.add(cidadeNome);
}
cidade_spn = findViewById(R.id.cidade_spn);
ArrayAdapter<String> cidadesAdapter = new ArrayAdapter<String>
(AdicionarLocalActivity.this, android.R.layout.simple_spinner_item, cidade);
cidadesAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
cidade_spn.setAdapter(cidadesAdapter);
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
referencia.child("ESTADOS").addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
final List<String> estado = new ArrayList<String>();
for (DataSnapshot estadoSnapshot : dataSnapshot.getChildren()) {
String estadoNome = estadoSnapshot.child("Nome").getValue(String.class);
estado.add(estadoNome);
}
estado_spn = findViewById(R.id.estado_spn);
ArrayAdapter<String> estadosAdapter = new ArrayAdapter<String>
(AdicionarLocalActivity.this, android.R.layout.simple_spinner_item, estado);
estadosAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
estado_spn.setAdapter(estadosAdapter);
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
}
}
My code is like this until now, I do not know what to put in the state's OnItemSelectedListener to pull the cities in the other Spinner.
My classes are like this
State
public class Estados {
private String estadoId;
private String nome;
private String sigla;
public Estados(String id, String nome, String sigla) {
this.estadoId = estadoId;
this.nome = nome;
this.sigla = sigla;
}
public String getEstadoId() {
return estadoId;
}
public void setEstadoId(String id) {
this.estadoId = estadoId;
}
public String getNome() {
return nome;
}
public void setNome(String nome) {
this.nome = nome;
}
public String getSigla() {
return sigla;
}
public void setSigla(String sigla) {
this.sigla = sigla;
}
@Override
public String toString() {
return nome;
}
}
And my City class looks like this:
public class Cidades {
private String cidadeId;
private Estados estado;
private String nome;
public Cidades(String cidadeId, Estados estado, String nome) {
this.cidadeId = cidadeId;
this.estado = estado;
this.nome = nome;
}
public String getCidadeId() {
return cidadeId;
}
public void setCidadeId(String cidadeId) {
this.cidadeId = cidadeId;
}
public Estados getEstado() {
return estado;
}
public void setEstado(Estados estado) {
this.estado = estado;
}
public String getNome() {
return nome;
}
public void setNome(String nome) {
this.nome = nome;
}
@Override
public String toString() {
return nome;
}
}