Tecnologías Móviles
clase 4
Ejercicio de la clase anterior
MainLayout
FormLayout
Ejercicio de la clase anterior - MainActivity
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
userAdapter = new UserAdapter(this);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
ListView list = (ListView) findViewById(R.id.listaUsuarios);
list.setAdapter(userAdapter);
final Activity self = this;
FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
assert fab != null;
fab.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent i = new Intent(self, FormActivity.class);
startActivityForResult(i, OBTENER_USUARIOS);
}
});
}
Ejercicio de la clase anterior - FormActivity
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_form);
Button aceptar = (Button) findViewById(R.id.aceptar);
Button cancelar = (Button) findViewById(R.id.cancelar);
assert aceptar != null;
aceptar.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
EditText nombre = (EditText) findViewById(R.id.nombre);
EditText apellido = (EditText) findViewById(R.id.apellido);
EditText mail = (EditText) findViewById(R.id.mail);
Intent i = new Intent();
i.putExtra("nombre", nombre.getText().toString());
i.putExtra("apellido", apellido.getText().toString());
i.putExtra("mail", mail.getText().toString());
setResult(Activity.RESULT_OK, i);
finish();
}
});
assert cancelar != null;
cancelar.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
finish();
}
});
}
Ejercicio de la clase anterior - MainActivity
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
if(requestCode == OBTENER_USUARIOS && resultCode == RESULT_OK) {
User usuario =
new User(
data.getStringExtra("nombre"),
data.getStringExtra("apellido"),
data.getStringExtra("mail")
);
userAdapter.addItem(usuario);
}
}
Ejercicio de la clase anterior - User
public class User {
String mNombre;
String mApellido;
String mMail;
public User(String nombre, String apellido, String mail) {
mNombre = nombre;
mApellido = apellido;
mMail = mail;
}
public String getNombre() {
return mNombre;
}
public String getApellido() {
return mApellido;
}
public String getMail() {
return mMail;
}
}
Ejercicio de la clase anterior - UserAdapter
public class UserAdapter extends BaseAdapter {
private Context mContext;
ArrayList<User> usrs = new ArrayList<User>();
public UserAdapter(Context context) {
mContext = context;
}
@Override
public int getCount() {
return usrs.size();
}
@Override
public User getItem(int position) {
return usrs.get(position);
}
@Override
public long getItemId(int position) {
return 0;
}
...
}
Ejercicio de la clase anterior - UserAdapter
public class UserAdapter extends BaseAdapter {
...
@Override
public View getView(int position, View convertView, ViewGroup parent) {
if(convertView == null) {
LayoutInflater li = LayoutInflater.from(mContext);
convertView = li.inflate(R.layout.list_item, null);
}
User u = getItem(position);
((TextView) convertView.findViewById(R.id.nombre)).setText(u.getNombre());
((TextView) convertView.findViewById(R.id.apellido)).setText(u.getApellido());
((TextView) convertView.findViewById(R.id.mail)).setText(u.getMail());
return convertView;
}
public void addItem(User usuario) {
usrs.add(usuario);
notifyDataSetChanged();
}
}
Fragments
Representa una porción de la interfaz de un Activity.
Es un módulo reusable que se puede agregar, eliminar o reemplazar dentro de un Activity.
Un Activity puede contener mas de un Fragment
Fragments
Se pueden configurar para maximizar la experiencia del usuario.
Fragments - Ciclo de Vida
- onAttach: Se llama cuando el Fragment es asociado al Activity.
- onActivityCreated: Se llama cuando se va a crear el arbol de Views.
- onActivityCreated: Se llama cuando el método onCreate del Activity terminó su ejecución.
- onDestroyView: Se llama cuando se va a eliminar el arbol de Views.
- onDetach: Se llama cuando el Fragment es desasociado del Activity.
Fragments
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="match_parent">
<fragment
android:name="com.example.news.ArticleListFragment"
android:id="@+id/list"
android:layout_weight="1"
android:layout_width="0dp"
android:layout_height="match_parent" />
<fragment
android:name="com.example.news.ArticleReaderFragment"
android:id="@+id/viewer"
android:layout_weight="2"
android:layout_width="0dp"
android:layout_height="match_parent" />
</LinearLayout>
FragmentManager fragmentManager =
getFragmentManager();
FragmentTransaction fragmentTransaction =
fragmentManager.beginTransaction();
ExampleFragment fragment = new ExampleFragment();
fragmentTransaction.add(R.id.fragment_container, fragment);
fragmentTransaction.commit();
Agregado dentro del Layout
Agregado Programáticamente
Fragments
Comunicación del Fragment con el Activity
//Obtener una referencia al Activity que contiene el Fragment
Activity padre = getActivity();
/*
* Para devolver resultados al Activity padre el primer paso
* es crear una interfaz y hacemos que el Activity la implemente
*/
public interface OnSubmitListener {
public void onSubmit(User usuario);
}
/*
* Luego, en nuestro Fragment casteamos el Activity a la interfaz
* y llamamos al método
*/
public static class FormFragment extends Fragment {
...
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
...
final OnSubmitListener listener = (OnSubmitListener) getActivity();
save.setOnClickListener(new View.OnClickListener() {
User usuario = ....;
listener.onSubmit(usuario);
});
...
}
}
Ejercicio
A la aplicación creada en el ejercicio de la clase anterior, agregarle las siguientes características:
- El listado de usuarios debe estar incluido dentro de un Fragment (ListFragment).
- El formulario para dar de alta un usuario, debe estar incluido dentro de un Fragment (FormFragment).
- Si el dispositivo se encuentra apaisado (landscape), el Activity debe incluir los 2 fragments uno al lado del otro (Revisar la clase 2).
- Si el dispositivo se encuentra vertical, el Activity debe reemplazar el ListFragment con FormFragment cuando se quiere agregar un nuevo usuario.
- Cuando hago click en un elemento de la lista, se debe poder editar dicho elemento reutilizando FormFragment.
- Se debe poder eliminar un elemento de la lista.
Tecnologías Móviles - Clase 4
By Agustin Moyano
Tecnologías Móviles - Clase 4
- 617