Hola a todos:
Este codigo trata sobre el uso de FragmantTAbHost.
Tengo una actividad principal que es una extends de FragmentActivity
Código PHP:
public class MainIngles extends FragmentActivity {
private FragmentTabHost tabhost;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.mainingles);
tabhost = (FragmentTabHost) findViewById(android.R.id.tabhost) ;
tabhost.setup(this, getSupportFragmentManager(), R.id.realtabcontent);
tabhost.addTab(tabhost.newTabSpec("tab1").setIndicator("Ingles", getResources().getDrawable(R.drawable.ingles32x32)), tab1.class, null );
tabhost.addTab(tabhost.newTabSpec("tab2").setIndicator("Español", getResources().getDrawable(R.drawable.spain32x32)), tab2.class, null );
tabhost.addTab(tabhost.newTabSpec("anadiringles").setIndicator("Añadir",getResources().getDrawable(R.drawable.anadir32x32)), anadiringles.class, null);
}
}
Con esto se consigue una pantalla con tres pestañas.
Cada pestaña tab1, tab2 y anadiringles son clases extends de Fragment.
En esta clase el método onCreateView sustituye al onCreate
Código PHP:
public class tab1 extends Fragment {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
return inflater.inflate(R.layout.tab1, container, false);
}
}
En su correspondiete layout tab1.xml que infla el layout. Aqui hay un listview que va a contener una tabla con dos columnas, osea que cada linear tendra dos campos.
Código PHP:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<ListView
android:id="@+id/listpalabras"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="10dp" />
</LinearLayout>
Los campos estan en un row.xml definido así.
Código PHP:
<?xml version="1.0" encoding="utf-8"?>
<TableLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/row"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<TableRow>
<TextView
android:id="@+id/tvtextE"
android:textSize="20sp"
android:layout_width="120dp"
android:textStyle="bold" />
<TextView
android:id="@+id/tvtextI"
android:textSize="20sp"
android:textStyle="bold" />
</TableRow>
</TableLayout>
En la clase de cada Fragment el siguiente método haria la funcion de activity (creo)
Código PHP:
@Override
public void onActivityCreated (Bundle state) {
super.onActivityCreated(state);
MostrarPalabrasIngles();
registerForContextMenu(lvNotas);
}
con registerForContextMenu(lvNotas) creo un menu contextual sobre un objeto lvNotas que lo tengo declarado en la clase tab1 extends de Fragment como private ListView lvNotas;
Con todo esto consigo un listado de dos columnas en la cual una es la palabra en ingles y al lado es castellano.
Estoy intentando que al hacer la pulsación prolongada sobre un item del listview sacar un menu contextual con un menu de editar borrar, etc.
El sacar el menu con las opciones que he definido en una array.xml de values no hay problema.
El problema viene que no consigo capturar el item.
Vi es siguiente código pero es para una clase que es una extends de ListActivity.
Código PHP:
@Override
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) {
if (v.getId() == android.R.id.list) {
AdapterView.AdapterContextMenuInfo info = (AdapterView.AdapterContextMenuInfo) menuInfo;
@SuppressWarnings("unchecked")
HashMap<String, String> item = (HashMap<String, String>) this.getListAdapter().getItem(info.position);
menu.setHeaderTitle(item.get(ClientesColumns.NOMBRE) + " " + item.get(ClientesColumns.APELLIDOS));
String[] menuItems = getResources().getStringArray(R.array.listmenu);
for (int i = 0; i < menuItems.length; i++) {
menu.add(Menu.NONE, i, i, menuItems[i]);
}
}
}
@Override
public boolean onContextItemSelected(MenuItem item) {
AdapterView.AdapterContextMenuInfo info = (AdapterView.AdapterContextMenuInfo) item.getMenuInfo();
@SuppressWarnings("unchecked")
HashMap<String, String> itm = (HashMap<String, String>) this.getListAdapter().getItem(info.position);
int menuItemIndex = item.getItemId();
switch (menuItemIndex) {
case 0:
showEditClientDialog(
Integer.parseInt(itm.get(ClientesColumns._ID)),
itm.get(ClientesColumns.NOMBRE),
itm.get(ClientesColumns.APELLIDOS),
itm.get(ClientesColumns.EDAD));
return true;
case 1:
showConfirmDialog(info.position);
return true;
default:
return super.onOptionsItemSelected(item);
}
}
Si alguien sabe como hacer esto en una clase que extends de Fragment, bienvenido sea.
Un saludo.