Androidアプリケーションでフラグメントを使用してviewPagerを構築しているときに、非常に奇妙な問題に直面しています。レイアウトと 2 つのフラグメントを構築するアクティビティがあります。それぞれに RecyclerView が含まれており、そのコンテンツをサーバーから動的にロードします。フラグメントの静的コンテンツでテストしたところ、すべてうまく機能しましたが、テスト済みで機能している動的コンテンツ フラグメントに切り替えると、ViewPager は最初のフラグメントをロードせず、2 番目のフラグメントのみをロードします。それらを入れ替えても、viewPager は 2 番目のものだけをロードします。最初のタブには、常に白い空白のフィールドしか表示されません。どんな助けでも大歓迎です。
活動部分:
tabLayout = (TabLayout) findViewById(R.id.contacts_tabs_layout);
adapter = new ContactsPagerAdapter(getSupportFragmentManager());
viewPager.setAdapter(adapter);
tabLayout.setupWithViewPager(viewPager);
アクティビティのレイアウト:
<android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent">
<android.support.design.widget.AppBarLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<android.support.v7.widget.Toolbar
android:id="@+id/toolbar_parent"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize" />
<android.support.design.widget.TabLayout
android:id="@+id/contacts_tabs_layout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:tabMaxWidth="0dp"
app:tabGravity="fill"
app:tabMode="scrollable">
</android.support.design.widget.TabLayout>
</android.support.design.widget.AppBarLayout>
<android.support.v4.view.ViewPager
android:id="@+id/view_pager_contacts_list"
android:layout_width="match_parent"
android:layout_height="fill_parent"
app:layout_behavior="@string/appbar_scrolling_view_behavior" />
フラグメントのレイアウト:
<?xml version="1.0" encoding="utf-8"?>
<android.support.v7.widget.RecyclerView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/contacts_list"
android:layout_width="fill_parent"
android:layout_height="match_parent" />
フラグメントの関連コード:
contactsList = (RecyclerView) v.findViewById(R.id.contacts_list);
contactsList.setLayoutManager(new LinearLayoutManager(getActivity()));
adapter = new ContactsListAdapter(getActivity());
contactsList.setAdapter(adapter);
controller.getContacts(new CommunicationListener() {
@Override
public void onFileReceived(FilePath filePath, byte[] data) {
System.out.println("RECEIVED CONTACTS DATA FILE WITH SIZE OF " + data.length);
final Contact c = Utils.deserializeContact(data);
new Handler(Looper.getMainLooper()).post(new Runnable() {
@Override
public void run() {
adapter.add(c);
}
});
}
});
return v;
アダプターの部分:
public ContactsPagerAdapter(FragmentManager fragmentManager) {
super(fragmentManager);
}
@Override
public Fragment getItem(int position)
{
switch(position){
case 0:
return new ContactsListFragment();
case 1:
return new TestFragment();
default:
return null;
}
}
@Override
public int getItemPosition(Object object) {
return POSITION_NONE;
}
@Override
public int getCount() {
return 2;
}