Curso de Android | Como crear una lista (ItemList) 1

Curso de Android
Como crear una lista (ItemList)

Curso de Android | Como crear una lista (ItemList) 2

Qué es una Lista

Una lista en el contexto de Activity es la interfaz gráfica que nos permite navegar por una serie de datos.

Curso de Android | Como crear una lista (ItemList) 3

Usando ArrayAdapter

    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_oooooooooooooo);
        ArrayList<String> palabras = new ArrayList<String>();
        palabras.add("amor");
        palabras.add("cariño");
        palabras.add("pasión");

        ListView lv = findViewById(R.id.miLista);

        lv.setAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, palabras));
    }

Usando RecyclerView

RecyclerView rv =  findViewById(R.id.miLista);
String [] paises = getResources().getStringArray(R.array.countries);
MyAdapter myAdapter = new MyAdapter(this, paises);
rv.setLayoutManager(new LinearLayoutManager(this));
rv.setHasFixedSize(true);
rv.setAdapter(myAdapter);
MyAdapter.java
public class MyAdapter extends RecyclerView.Adapter<MyAdapter.ViewHolderPais> {

//El ViewHolder es la fila. En el constructor del ViewHolderPlanta accedemos a los objetos
//de la fila mediante código Java
public static class ViewHolderPais extends RecyclerView.ViewHolder {
 TextView tv;
 private View.OnClickListener onItemClickListener;

 public ViewHolderPais(@NonNull View itemView) {
  super(itemView);
  tv = itemView.findViewById(R.id.tv);
 }
}

private String[] paises;
private Context context;

public MyAdapter(@NonNull Context context, String [] paises) {
 this.paises = paises;
 this.context = context;
}

//En el constructor del ViewHolder inflamos el xml
@NonNull
@Override
public ViewHolderPais onCreateViewHolder(@NonNull ViewGroup parent, int position) {
 LayoutInflater layoutInflater = LayoutInflater.from(parent.getContext());
 View row = layoutInflater.inflate(R.layout.simple_row_list,parent,false);
 ViewHolderPais viewHolder = new ViewHolderPais(row);
 viewHolder.itemView.getTag();
 return viewHolder;
}

@Override
public void onBindViewHolder(ViewHolderPais viewHolder, int position) {
 final String pais = paises[position];
 viewHolder.tv.setText(pais);
}

@Override
public int getItemCount() {
 return paises.length;
}
}
res/values/countries.xml
<?xml version="1.0" encoding="UTF-8"?>
<resources>
 <string-array name="countries">
  <item name="usa">United States</item>
  <item name="brazil">Brazil</item>
  <item name="russia">Russia</item>
  <item name="egypt">Egypt</item>
  <item name="japan">Japan</item>
 </string-array>
</resources>

Content Provider

Nos permiten acceder a la información de otras aplicaciones incluida en un dispositivo, por ejemplo, a la agenda telefónica.

En un content provider los datos pueden estar almacenados:

  • en una base de datos.
  • en archivos.
  • en una red.

Cómo acceder a los contactos

Para leer los contactos, primero habrá que añadir uno:
Símbolo del teléfono → botón de menú → Add contact.

Añadimos el permiso justo antes del cierre del Manifest:
<uses-permission android:name = «android.permission.READ_CONTACTS» />

Obtener los teléfonos

Para recuperar los contactos:
private ArrayList getContactos(){
 ContentResolver cr = getContentResolver();
 Cursor contactos = cr.query(ContactsContract.Contacts.CONTENT_URI, null, null, null, null);
 String phoneNo = "";
 ArrayList listaContactos = new ArrayList();
 int n = contactos.getCount();

 if (contactos.getCount() > 0) {
  while (contactos.moveToNext()) {
   String id = contactos.getString(contactos.getColumnIndex(ContactsContract.Contacts._ID));
   String name = contactos.getString(contactos.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));
   if (Integer.parseInt(contactos.getString(contactos.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER))) > 0) {
    Cursor pCur = cr.query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI,null,
    ContactsContract.CommonDataKinds.Phone.CONTACT_ID+ " = ?", new String[] { id }, null);
    while (pCur.moveToNext()) {
     phoneNo = pCur.getString(pCur.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
     listaContactos.add(new Contacto(name, phoneNo));
    }
    pCur.close();
   }
  }
 }
 return listaContactos;
}
Para solicitar los permisos de acceso a los contactos:
if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.M){
 if (ContextCompat.checkSelfPermission(this, Manifest.permission.READ_CONTACTS) != PackageManager.PERMISSION_GRANTED) {
  ActivityCompat.requestPermissions(this,new String[]{Manifest.permission.READ_CONTACTS}, MY_PERMISSIONS_REQUEST_READ_CONTACTS);
 }else{
  contactosList = getContactos();
 }
}else{
 contactosList = getContactos();
}

...

@Override
public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) {
 switch (requestCode) {
  case MY_PERMISSIONS_REQUEST_READ_CONTACTS: {
   // If request is cancelled, the result arrays are empty.
   if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
    contactosList = getContactos();
   } else {
    // permission denied, boo! Disable the
    // functionality that depends on this permission.
   }
   return;
  }
  // other 'case' lines to check for other
  // permissions this app might request
 }
}

Ejercicio: Recuperar contactos

Recuperar los contactos del teléfono y mostrarlos en un RecyclerView

CardView

implementation 'androidx.cardview:cardview:1.0.0'
<androidx.cardview.widget.CardView
 ...
 android:layout_margin="4dp"

 app:cardCornerRadius="60dp"
 app:cardElevation="40dp"
 app:cardMaxElevation="60dp"
>

Ejercicio: Cardview

Utilizar un CardView para maquetar cada una de las filas del contenido cargado con un RecyclerAdapter.