Por 9.99€ al mes tendrás acceso completo a todos los cursos. Sin matrícula ni permanencia.
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.
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.