我是一名Java兽医,但在Android上是新手。
无论如何,以下是我的Activity.onCreate()方法的代码块:
allContactsPage = new AllContactsPage();
allGroupsPage = new AllGroupsPage();
ViewPager viewPager = (ViewPager) findViewById(R.id.contactsTabsViewPager);
ContactsTabsPagerAdapter tabsAdapter = new ContactsTabsPagerAdapter(getSupportFragmentManager(), allContactsPage, allGroupsPage);
viewPager.setAdapter(tabsAdapter);
TabLayout tabLayout = (TabLayout) findViewById(R.id.contactsActivityTabs);
tabLayout.setupWithViewPager(viewPager);
contactsService.loadAllContacts(this);
allContactsPage和allGroupsPage是片段。我使用ViewPager和FragmentPageAdapter(ContactsTabsPagerAdapter)将它们添加到TabLayout。
毕竟,我在我的服务上调用loadAllContacts(this)。 "这"作为回调传递,所以当它完成后,它会回调到活动中,活动会用它们应该显示的数据更新两个碎片(两个碎片都是实例变量)。
我的问题是,在旋转时,会创建每个片段中的两个。 UI中显示一个版本,回调调用另一个版本。因此,在UI中显示的那个是空白的,永远不会获取数据。
我已经看过很多关于这个问题的帖子,但我还没有看到如何使用ViewPager / FragmentPagerAdapter管理的片段来完美处理它。我只是想知道如何确保我有正确的片段引用来将数据传递给旋转。
一旦我解决了问题,我可能会考虑避免在轮换时加载数据,但我已经知道如何做到这一点。只需要弄清楚如何正确显示它。
感谢。
答案 0 :(得分:0)
<activity
android:name=".YourActivity"
android:configChanges="orientation|screenSize|keyboardHidden" />
OR
<activity
android:name=".YourActivity"
android:screenOrientation="portrait" />
答案 1 :(得分:0)
尝试将Fragment实例化移动到ContactsTabPagerAdapter
。像
@Override
public Fragment getItem(int position) {
switch(position) {
case 0: return new AllContactsPage();
case 1: return new AllGroupsPage();
default: throw new IllegalArgumentException();
}
}
PagerAdapter包含重用片段的逻辑,应该为您处理。见https://github.com/android/platform_frameworks_support/blob/master/v4/java/android/support/v4/app/FragmentPagerAdapter.java#L90