El diseño
nos vamos a app->res->values->strings.xml escribimos lo siguiente:<resources> <string name="app_name">mexicoestadistico</string> <string name="estado_prompt">Seleccione un estado</string> </resources>
nos vamos a app->res->layout->activity_main.xml
<?xml version="1.0" encoding="utf-8"?> <android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".MainActivity"> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:gravity="center" android:orientation="vertical" tools:context=".MainActivity"> <Spinner android:id="@+id/spinner1" android:layout_width="match_parent" android:layout_height="wrap_content" android:prompt="@string/estado_prompt" tools:layout_editor_absoluteX="32dp" tools:layout_editor_absoluteY="62dp"> </Spinner> <Button android:id="@+id/btnPieChart" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_margin="10dp" android:onClick="graficar" android:text="Mostrar datos" tools:layout_editor_absoluteX="30dp" tools:layout_editor_absoluteY="300dp" /> <com.github.mikephil.charting.charts.PieChart android:id="@+id/piechart" android:layout_width="match_parent" android:layout_height="match_parent" /> </LinearLayout> </android.support.constraint.ConstraintLayout>
MainActivity
En este codigo se muestra un spinner que se va cargar con arreglo de string y un boton que cuando lo presionamos nos muestre la grafica del estado.El código queda de la siguiente forma:package mx.com.tutosoftware.mexicoestadistico; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.View; import android.widget.AdapterView; import android.widget.ArrayAdapter; import android.widget.Spinner; import com.github.mikephil.charting.charts.PieChart; import com.github.mikephil.charting.data.PieData; import com.github.mikephil.charting.data.PieDataSet; import com.github.mikephil.charting.data.PieEntry; import com.github.mikephil.charting.utils.ColorTemplate; import java.util.ArrayList; import java.util.List; import mx.com.tutosoftware.mexicoestadistico.model.Datos; import mx.com.tutosoftware.mexicoestadistico.model.Estados; import mx.com.tutosoftware.mexicoestadistico.service.DatosService; import retrofit2.Call; import retrofit2.Callback; import retrofit2.Response; import retrofit2.Retrofit; import retrofit2.converter.gson.GsonConverterFactory; public class MainActivity extends AppCompatActivity { Spinner spinner; ArrayList<String> estados = new ArrayList<>(); ArrayAdapter arrayAdapter; List<Datos> datosInegi= new ArrayList<Datos>(); String poblacionFemenina; String poblacionMasculina; PieChart pieChart; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); arrayAdapter = new ArrayAdapter(this,android.R.layout.simple_spinner_item,estados); spinner = (Spinner) findViewById(R.id.spinner1); pieChart = findViewById(R.id.piechart); spinner.setAdapter(arrayAdapter); spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { @Override public void onItemSelected(AdapterView<?> parent, View view, int position, long id) { poblacionFemenina = datosInegi.get(position).getPob_fem(); poblacionMasculina= datosInegi.get(position).getPob_mas(); } @Override public void onNothingSelected(AdapterView<?> parent) { } }); getDatosEstado(); } private void getDatosEstado(){ Retrofit retrofit = new Retrofit.Builder() .baseUrl("https://gaia.inegi.org.mx/wscatgeo/") .addConverterFactory(GsonConverterFactory.create()) .build(); DatosService datosService = retrofit.create(DatosService.class); Call<Estados> call = datosService.getData() ; call.enqueue(new Callback<Estados>() { @Override public void onResponse(Call<Estados> call, Response<Estados> response) { Estados estadosI = response.body(); datosInegi= estadosI.getDatos(); for(Datos datosE : datosInegi){ estados.add(datosE.getNom_agee()); } arrayAdapter.notifyDataSetChanged(); } @Override public void onFailure(Call<Estados> call, Throwable t) { } }); } public void graficar(View view){ float numMujeres = Float.parseFloat(poblacionFemenina); float numHombres = Float.parseFloat(poblacionMasculina); ArrayList<PieEntry> habitantes = new ArrayList<PieEntry>(); habitantes.add(new PieEntry(numMujeres,"Mujeres")); habitantes.add(new PieEntry(numHombres,"Hombres")); PieDataSet dataSet = new PieDataSet(habitantes,"Número de habitantes"); dataSet.setValueTextSize(12); ArrayList<String> tipoHabitante = new ArrayList<String>(); PieData data = new PieData(dataSet); pieChart.setData(data); dataSet.setColors(ColorTemplate.COLORFUL_COLORS); pieChart.animateXY(5000,5000); } }
Corriendo la app
Corremos el ejemplo:Seleccionamos un estado y hacemos click en Mostrar datos
Volvemos a selecionar Mexico