Android ActionBar タブで ViewPager を設定するのに問題があります。私はアプリ開発が初めてで、試行錯誤しながらすべてを機能させようとしていますが、これは非常に困難です。
私がしたいこと
いくつかのフラグメントを含む ViewPager をそれぞれ含む 2 つのアクションバー タブ。
これまでに行ったこと
MainActivity:
public class MainActivity extends FragmentActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// load ActionBar
ActionBar actionBar = getActionBar();
actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
actionBar.setCustomView(R.layout.actionbar_view);
actionBar.setDisplayOptions(ActionBar.DISPLAY_SHOW_CUSTOM);
actionBar.setDisplayShowHomeEnabled(true);
tabA = actionBar.newTab().setText("Tab A");
tabB = actionBar.newTab().setText("Tab B");
Fragment fragmentA = new FragmentA();
Fragment fragmentB = new FragmentB();
tabA.setTabListener(new MyTabListener(fragmentA));
tabB.setTabListener(new MyTabListener(fragmentB));
actionBar.addTab(tabA);
actionBar.addTab(tabB);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
class MyTabListener implements ActionBar.TabListener {
public Fragment frag;
public MyTabListener(Fragment frag) {
this.frag = frag;
}
public void onTabReselected(Tab tab, FragmentTransaction ft) {
// on tab reselected
}
public void onTabSelected(Tab tab, FragmentTransaction ft) {
// need to create own FragmentTransaction cause ActionBar doesn'T support 'android.support.v4'
android.support.v4.app.FragmentTransaction fft = mActivity.getSupportFragmentManager().beginTransaction();
fft.replace(R.id.main_fragment_container, frag);
fft.commit();
}
public void onTabUnselected(Tab tab, FragmentTransaction ft) {
// need to create own FragmentTransaction cause ActionBar doesn'T support 'android.support.v4'
android.support.v4.app.FragmentTransaction fft = mActivity.getSupportFragmentManager().beginTransaction();
fft.remove(frag);
fft.commit();
}
}
}
FragmentA.class
public class FragmentA extends Fragment {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
return inflater.inflate(R.layout.layout_A, container, false);
}
@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
ViewPager mViewPager = (ViewPager) view.findViewById(R.id.tabA_pager);
mViewPager.setAdapter(new MyPagerAdapter(getChildFragmentManager()));
}
}
MyPagerAdapter.class
public class MyPagerAdapter extends FragmentPagerAdapter {
public MyPagerAdapter(FragmentManager fm) {
super(fm);
}
@Override
public Fragment getItem(int position) {
Fragment f = new Fragment();
switch (position) {
case 0:
f = LayoutOne.newInstance(null);
break;
case 1:
f = LayoutTwo.newInstance(null);
break;
case 2:
f = LayoutThree.newInstance(null);
break;
}
return f;
}
@Override
public int getCount() {
return 3;
}
}
LayoutOne.class
public class LayoutOne extends Fragment {
public static Fragment newInstance(Context context) {
LayoutOne f = new LayoutOne();
return f;
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) {
TextView root = (TextView) inflater.inflate(R.layout.layout_one, null);
return root;
}
}
問題は何ですか?
アプリは問題なく起動しますが、テスト テキストが表示されないため、タブ A のフラグメントの読み込みがうまくいかないようです。タブ B に切り替えてからタブ A に戻ると、次のように FC が表示されます: java.lang.IllegalStateException: Activity has been destroyed ... at FragmentA.onViewCreated なので、ViewPager アダプターに問題があると思います。
いくつかの検索を行いましたが、この明示的なレイアウトを含む作業バージョンを見つけることができませんでした. 誰かが6 か月前に同様の質問を投稿しましたが、解決策はありません。
セットアップの何が問題になっていますか?