Ver Mensaje Individual
  #1 (permalink)  
Antiguo 09/05/2014, 03:30
Avatar de ManelGomez
ManelGomez
 
Fecha de Ingreso: diciembre-2007
Ubicación: El Prat de llobregat
Mensajes: 180
Antigüedad: 16 años, 11 meses
Puntos: 2
Obtener el item de Fragment

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 = (FragmentTabHostfindViewById(android.R.id.tabhost) ;
        
tabhost.setup(thisgetSupportFragmentManager(), 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 inflaterViewGroup containerBundle savedInstanceState) {
        return 
inflater.inflate(R.layout.tab1containerfalse);
    }

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 menuView vContextMenuInfo menuInfo) {
        if (
v.getId() == android.R.id.list) {
            
AdapterView.AdapterContextMenuInfo info = (AdapterView.AdapterContextMenuInfomenuInfo;
            @
SuppressWarnings("unchecked")
            
HashMap<StringStringitem = (HashMap<StringString>) 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 0menuItems.lengthi++) {
                
menu.add(Menu.NONEiimenuItems[i]);
            }
        }
    }

    @
Override
    
public boolean onContextItemSelected(MenuItem item) {
        
AdapterView.AdapterContextMenuInfo info = (AdapterView.AdapterContextMenuInfoitem.getMenuInfo();
        @
SuppressWarnings("unchecked")
        
HashMap<StringStringitm = (HashMap<StringString>) 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.