En la aplicación que estoy desarrollando estoy usando una ViewPager con fragmentos y cada fragmento construye su propio menú independientemente de todos los demás fragmentos en ViewPager.Elementos de acción del fragmento inicial de Viewpager no se muestran
El problema es que a veces los fragmentos inicializados por ViewPager de forma predeterminada (es decir, en su estado inicial) no están llenando sus elementos en el menú de elementos de acción. Lo que es peor es que este problema solo ocurre intermitentemente. Si deslizo la ViewPager lo suficiente para que los fragmentos se vuelvan a inicializar, al deslizar hacia atrás, el menú se llena correctamente.
Código de actividad:
package net.solarnz.apps.fragmentsample;
import android.app.Activity;
import android.app.Fragment;
import android.app.FragmentManager;
import android.os.Bundle;
import android.support.v13.app.FragmentStatePagerAdapter;
import android.support.v4.view.ViewPager;
public class FragmentSampleActivity extends Activity {
private ViewPagerAdapter mViewPagerAdapter;
private ViewPager mViewPager;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
if (mViewPagerAdapter == null) {
mViewPagerAdapter = new ViewPagerAdapter(getFragmentManager());
}
mViewPager = (ViewPager) findViewById(R.id.log_pager);
mViewPager.setAdapter(mViewPagerAdapter);
mViewPager.setCurrentItem(0);
}
private class ViewPagerAdapter extends FragmentStatePagerAdapter {
public ViewPagerAdapter(FragmentManager fm) {
super(fm);
}
@Override
public int getCount() {
return 8;
}
@Override
public Fragment getItem(int position) {
Fragment f = Fragment1.newInstance(position);
// f.setRetainInstance(true);
f.setHasOptionsMenu(true);
return f;
}
}
}
código Fragmento:
package net.solarnz.apps.fragmentsample;
import android.app.Fragment;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuInflater;
public class Fragment1 extends Fragment {
int mNum;
static Fragment newInstance(int num) {
Fragment1 f = new Fragment1();
// Supply num input as an argument.
Bundle args = new Bundle();
args.putInt("num", num);
f.setArguments(args);
return f;
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setHasOptionsMenu(true);
mNum = getArguments() != null ? getArguments().getInt("num") : 0;
}
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
inflater.inflate(R.menu.menu_list, menu);
}
}
Diseño:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent" >
<android.support.v4.view.ViewPager
android:id="@+id/log_pager"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</LinearLayout>
Menú:
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item android:id="@+id/menu_refresh"
android:title="Refresh"
android:icon="@android:drawable/ic_delete"
android:showAsAction="ifRoom|withText" />
</menu>
menú Acción está poblando: http://i.stack.imgur.com/QFMDd.png
menú Acción no ser poblada: http://i.stack.imgur.com/sH5Pp.png
acuerdo con Solarnz que parece no haber ninguna solución obvia. Creé una [aplicación de demostración] (https://github.com/snodnipper/page-flipper-race-condition/) que permite reproducir el problema de manera confiable. El mismo problema parece ser [informado en ActionBarSherlock] (https://github.com/JakeWharton/ActionBarSherlock/issues/351) y he planteado este [problema] (http://code.google.com/p/android/issues/detail? id = 29472) en el rastreador de problemas de Android. – snodnipper