ItemList

Contactar con el profesor

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.

ItemList 1

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.

← Layouts
Almacenar info →

Aviso Legal | Política de privacidad