OnCreateOptionsMenu antes de onCreate android
Soy principiante a androide y estoy desarrollando la pequeña aplicación androide. En mi aplicación estoy usando la biblioteca de Sherlock. Mi aplicación contiene una actividad principal y dos fragmentos. En la estructura de mi lista de fragmentos se ve como
public class MyCards extends SherlockListFragment { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setHasOptionsMenu(true); Log.i("!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", "inside fragment on create"); } @Override public void onActivityCreated(Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); Log.i("!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", "inside on activity created"); } private void displayCards(int type) { Log.i("!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", "inside display cards"); } @Override public void onResume() { super.onResume(); } @Override public void onPause() { super.onPause(); } @Override public void onDestroy() { super.onDestroy(); } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View view = inflater.inflate(R.layout.mycards, container, false); View view1 = inflater.inflate(R.layout.empty_card, container, false); return view; } /*@Override public void onPrepareOptionsMenu(Menu menu) { super.onPrepareOptionsMenu(menu); optionsMenu = menu; }*/ public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { inflater.inflate(R.menu.menu_type2, menu); Log.i("!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", "inside on create option menu"); Spinner spinner = (Spinner) menu.findItem(R.id.cardType) .getActionView(); SpinnerAdapter adapter = ArrayAdapter.createFromResource(getSherlockActivity().getSupportActionBar().getThemedContext(), R.array.card_action_list,android.R.layout.simple_spinner_dropdown_item); spinner.setAdapter(adapter); // set the adapter spinner.setOnItemSelectedListener(new OnItemSelectedListener() { @Override public void onItemSelected(AdapterView<?> parent, View view, int pos, long id) { displayCards(pos); Log.i("!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", "inside on option selected"); } @Override public void onNothingSelected(AdapterView<?> arg0) { displayCards(0); Log.i("!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", "inside on no option selection"); } }); @Override public boolean onOptionsItemSelected(MenuItem item) { Log.i("!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!", "inside option select listener"); } }
Ahora mi problema es que cuando cambia de un fragmento a otro fragmento por primera vez da siguiente salida de registro
- NullPointerException en rotación durante el comando dispatchCreateOptionsMenu, la traza de pila no incluye ninguna función en mi aplicación
- La tecla programable del menú no se muestra en dispositivos Android Lollipop
- Barra de acción de Android: deshabilita el menú de opciones
- OnCreateOptionsMenu () llamando a super
- El menú de opciones que no se muestra en ICS utilizando la biblioteca de compatibilidad
01-04 00:54:06.997: I/!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!(2575): inside on create option menu 01-04 00:54:06.997: W/KeyCharacterMap(2575): No keyboard for id -1 01-04 00:54:06.997: W/KeyCharacterMap(2575): Using default keymap: /system/usr/keychars/qwerty.kcm.bin 01-04 00:54:07.020: I/!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!(2575): inside fragment on create 01-04 00:54:07.036: I/!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!(2575): inside on activity created
Que significa en la opción de creación llamada antes onfragment crear y en la actividad crear. Y también dando dos advertencia. Este trabajo sin ningún error. Pero no puedo mostrar la vista de lista
Ahora, cuando vuelvo a cambiar al mismo fragmento (por segunda vez), da la siguiente salida de registro
02-07 10:05:10.983: I/!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!(15844): inside on create option menu 02-07 10:05:11.023: I/!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!(15844): inside fragment on create 02-07 10:05:11.043: I/!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!(15844): inside on activity created 02-07 10:05:11.113: I/!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!(15844): inside display cards 02-07 10:05:11.133: I/!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!(15844): inside on option selected
Esta vez no está dando ninguna advertencia y funciona correctamente. También muestra mi vista de lista. Pero por primera vez no funciona correctamente .. Otro punto es que cuando lo corrí en la versión superior de android su funcionamiento bien. Pero si lo corría en la versión más baja de Android como 2.3.3 i muestra este comportamiento .. He leído sobre este ListFragment onPrepareOptionsMenu llamado antes onCreate. ¿Por qué y cómo corregir / evitar? Pero no soy capaz de resolver este problema.
Si defino setHasOptionsMenu(true)
dentro onActivityCreated
da la siguiente salida
01-04 03:32:38.622: I/!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!(8157): inside fragment on create 01-04 03:32:38.653: I/!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!(8157): inside on activity created 01-04 03:32:38.692: I/!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!(8157): inside on create option menu 01-04 03:32:38.700: W/KeyCharacterMap(8157): No keyboard for id -1 01-04 03:32:38.700: W/KeyCharacterMap(8157): Using default keymap: /system/usr/keychars/qwerty.kcm.bin
También traté de establecer setHasOptionsMenu para mi fragmento donde la transacción de fragmento real tiene lugar como a continuación ..
@Override public void onTabSelected(Tab tab, FragmentTransaction ft) { MyCards mc = new MyCards(); mc.setHasOptionsMenu(true); ft = mActivity.getSupportFragmentManager().beginTransaction(); mFragment = Fragment.instantiate(mActivity, mClass.getName(), mArgs); ft.add(android.R.id.content, mFragment, mTag); ft.commit(); }
Y todavía dando el mismo problema.
Cualquier problema con mi código o algo más? Así que cómo resolver este problema. Necesita ayuda … gracias …
- No se puede acceder a android / drawable Icon-Resource
- Cambiar el icono del menú de opciones en la barra de acciones dependiendo de un fragmento abierto
- Volver a usar el código del menú Opciones
- Android: java.lang.IllegalArgumentException: Tipo de elemento de carga útil no válido
- Creación de un menú de opciones emergentes en una barra de acción contextual
- ¿Cómo ordenar elementos de menú en el menú de opciones de una aplicación de Android?
- OpenOptionsMenu () no funcionará en appcompat-v7 22.1.0 o posterior
- ¿Cómo cambiar el icono del menú de opciones en la barra de acción?
Escriba setHasOptionsMenu(true);
En el onActivityCreated(Bundle savedInstanceState)
.
No sé por qué funciona así, pero haga esto: Establezca la opción setHasOptionsMenu(true)
en su actividad cuando agregue su fragmento a ella.
Por ejemplo:
//Activity class YourListFragment f = new YourListFragment(); f.setHasOptionsMenu(true); //here getSupportFragmentManager().beginTransaction() .add(R.id.your_list_fragment_container, f).commit();
Y elimínalo en el código de tu fragmento. Funcionó para mí.