FragmentStatePageAdapter (ViewPager için bağdaştırıcı olarak kullandığım) ve işlem çubuğundaki menü öğeleriyle ilgili bir sorunum var. Uygulamayı başlattığımda her şey yolunda. Görevi arka plana taşıyacak olursam (örneğin, HOME düğmesine basarsanız) ve etkinlik sona erene kadar bir şeyler yapmaya başlarım, sonra uygulamaya (uygulama başlatıcısı veya oluşturduğum bir bildirim) geri döndüğümde her şey yolunda eylem çubuğunda çoğaltılan menü öğeleri.FragmentStatePageAdapter yinelenen ActionBar menü öğeleri
Önemli bir ayrıntı, tek çoğaltılmış öğelerin ViewPager'da kullandığım her parçanın onCreateOptionsMenu() öğesinde oluşturulanlardır.
FragmentStatePageAdapter öğesini FragmentPageAdapter ile değiştirirseniz, öğeler artık çoğaltılamaz, ancak parçaları ViewPager'da gösterilmez (adaptörden getItem() işlevi hiçbir zaman geri dönmez, dolayısıyla hiçbir parça döndürmez).
Herhangi bir fikrin var mı? Menü öğelerini kopyalamak için FragmentStatePageAdapter'den kaçınmanın bir yolu var mı? Belki FragmentPageAdapter kullanın ama parçaları göstermek için bir değişiklik ile? Parçalarımdaki bir değişiklik mi? İşte
... benim uygulamadan bazı kod parçacıkları şunlardır menü öğeleri parçaları içine oluşturulur nasıl
: fragmanları ViewPager adaptörü
örneği nasıl@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
/* Create play button */
final MenuItem mPlay = menu.add(R.string.play_all);
mPlay.setIcon(R.drawable.ic_play_all);
mPlay.setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS);
mPlay.setOnMenuItemClickListener(new OnMenuItemClickListener() {
@Override
public boolean onMenuItemClick(MenuItem item) {
final List<Song> songs = getSongs();
if (songs.size() == 0) {
/* Show message */
Toast.makeText(mContext, R.string.no_song_list, Toast.LENGTH_LONG).show();
} else {
/* Play song list */
try { PlayManager.getService().playList(songs); } catch (Exception e) {}
}
return false;
}
});
/* Create menu */
super.onCreateOptionsMenu(menu, inflater);
}
@Override public Fragment getItem(int position) { final Class<?> cls = mTabs.get(position); /* No tab */ if (cls == null) return null; /* Instantiate fragment */ final Fragment fragment = Fragment.instantiate(mContext, cls.getName(), null); /* Add to list */ mFragments.put(position, fragment); /* Return fragment */ return fragment; }
Teşekkürler!
PS: Etkinliğin launchMode özelliğini "singleTop" olarak değiştirmeyi denedim ve ayrıca getItem() öğesinde önceden oluşturulmuş parçaya dönmeye çalıştım (ancak getItem() uygulamasına geri döndüğümde hiçbir zaman işe yaramaz , daha önce dediğim gibi).
Merhaba, Miguel! Çözüm buldunuz mu? – HighFlyer
Evet. Az önce kullandığım çözümün altında yayınladım. Bu gerçek bir çözüm değil, bir çözüm. –