PDA

Ver la Versión Completa : Menú de opciones en un Fragment


carlesqf
19/01/15, 09:41:08
Buenos días.
Me he metido en serio con todo esto de los fragment y cada día me encuentro con problemas nuevos.
El último está relacionado a la navegación entre fragmentos.
Todos ya conocereis que uno de los usos más normales para los fragmentos consiste en tener dos (A y B), situados en dos actividades diferentes. En A se ve el equivalente al índice de un libro. Escojo una de las entradas y el capítulo correspondiente aparece en B.
Esto funciona perfectamente.
Lo que yo quiero ahora es volver a A sin tener que usar los botones del teléfono, sino con las opciones del menú al que hago referencia en el título del mensaje.
Y no he conseguido que aparezca. Y he probado todo lo que he encontrado buscando por internet.
Anexo a continuación el código de la actividad B, el fragmento B, y el archivo del menú.
Espero que me digais que falla:

Activity B (PantallaContingutCapitols):
package com.carlesqf.laguerra;

import *.*;

public class PantallaContingutCapitols extends Activity{
SharedPreferences adrecafoto;
SharedPreferences.Editor NomEditor;
Intent anarfotos;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);

setContentView(R.layout.activity_contingutcapitols );
FragmentManager fragmentManager = getFragmentManager();
FragmentTransaction fragmentTransacton = fragmentManager.beginTransaction();

FragmentContingutCapitols FragContCap = new FragmentContingutCapitols();
Bundle b = new Bundle();
int posicio=getIntent().getIntExtra("position", 0);
b.putInt("position", posicio);
FragContCap.setArguments(b);
fragmentTransacton.add(R.id.container_contingut_ca pitols, FragContCap);
fragmentTransacton.commit();
// Declaració de "adrecafoto" i "NomEditor".
anarfotos=new Intent(this,PantallaFotos.class);
adrecafoto=getSharedPreferences("llocadrecafoto",0);
NomEditor=adrecafoto.edit();
}
}Fragment B(FragmentContingutCapitols):

package com.carlesqf.laguerra;

import *.*;

public class FragmentContingutCapitols extends Fragment {

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View v= inflater.inflate(R.layout.activity_contingutcapito ls, null);
// Getting the bundle object passed from "PantallaContingutCapitols"
Bundle b = getArguments();
String nomcap=LlistaCapitols.name[b.getInt("position")];
if (nomcap.contains("1700-1701 Les causes del conflicte:"))
v = inflater.inflate(R.layout.capitol1700, null);
else if ((nomcap.contains("1702 – Primers combats. Itàlia i front del Rin:")))
v = inflater.inflate(**, null);
return v;
}

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setHasOptionsMenu(true);
}

@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
// Do something that differs the Activity's menu here
super.onCreateOptionsMenu(menu, inflater);
inflater.inflate(R.menu.menu_fotos, menu);
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.action_settings:
// do s.th.
return true;
default:
return super.onOptionsItemSelected(item);
}
}
}"menu_fotos.xml":
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto" >

<item
android:id="@+id/tancar_pantalla"
android:icon="@drawable/iconacasa"
android:title="opciotancar"
app:showAsAction="ifRoom" >
</item>

</menu>

rafaxplayer
20/01/15, 07:32:10
Pare que el menú aparezca en la actividad desdeun fragment tienes que usar setHasOptionsMenu(true); normalmente se llama cuando la actividad esta creada yo lo suelo usar en OnCreate del fragment.

Con esto el menú se muestra en la actividad incluso si la actividad ya tiene un menú este se suma al de la actividad.

oxot
20/01/15, 10:37:05
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.action_settings:
// do s.th.
return true;
default:
return super.onOptionsItemSelected(item);
}
}



Supongo que tendrás que poner R.id.tancar_pantalla en vez de action_setings (que es lo que pone por defecto Android).
En lo que has puesto no soy capaz de encontrar otro defecto. Prueba a poner el menú declarando showAsAction=always para forzar a que se dibuje. Dependiendo de tu api objetivo, el menú puede no responder al botón menú del teléfono (algo que he visto que ocurre con las nuevas app compat de lollipop) pero deberías ver los 3 puntitos en la derecha de todo de tu Toolbar o ActionBar.
Adjunta una imagen de la app para que la veamos
:ok:

carlesqf
20/01/15, 11:13:48
Pare que el menú aparezca en la actividad desdeun fragment tienes que usar setHasOptionsMenu(true); normalmente se llama cuando la actividad esta creada yo lo suelo usar en OnCreate del fragment.

Con esto el menú se muestra en la actividad incluso si la actividad ya tiene un menú este se suma al de la actividad.

Gracias! :gracias:

Pero ahora tengo un menú de opciones tradicional, el que aparece en la parte inferior de la pantalla cuando aprieto el botón del telèfono.
Y yo lo que quiero conseguir es un "Action Bar menu", los que aparecen en la barra superior, a la derecha del icono y el nombre de la aplicación. La que se puede ver en la captura de pantalla que se encuentra a continuación.

oxot
20/01/15, 14:05:20
A partir de la API 11, si estás usando ActionBar, el menú se pone automáticamente en la AB (supongo que habrás hecho que tu actividad herede de ActionBarActivity, si no malo).
El resto lo veo tal cual lo hago yo...

carlesqf
21/01/15, 09:36:31
A partir de la API 11, si estás usando ActionBar, el menú se pone automáticamente en la AB (supongo que habrás hecho que tu actividad herede de ActionBarActivity, si no malo).
El resto lo veo tal cual lo hago yo...

Ya lo prové.

Si en lugar de public class PantallaContingutCapitols extends Activity{}
pongo public class PantallaContingutCapitols extends ActionBarActivity {}, siendo "PantallaContingutCapitols" la actividad desde donde llamo al fragment, la aplicación peta. :(:(:(

Que supongo que es esto lo que quieres decir que mi actividad herede de ActionBarActivity.

oxot
22/01/15, 23:23:53
correcto, pues para tener el action bar no te queda más remedio que heredar de ActionBarActivity.
Has importado correctamente las librerías al proyecto???
(las appcompat me refiero: busca en google que te explican cómo hacerlo en función de tu IDE)

Danos más pistas sobre tu error, si no es difícil...