我試圖實現兩個選項卡,並且還有一個導航抽屜。我可以單獨做這兩件事,但是當我試圖將兩者結合起來遇到問題時。我最初有用於創建我的兩個選項卡和我的MainActivity中的導航抽屜的代碼,這是當時的片段活動,但是當我清楚地知道對於導航抽屜中的Home選項時,我決定重構代碼將選項卡製作成帶有標籤的片段,然後像以前那樣填充兩個片段。導航抽屜項目是具有選項卡的片段
在啓動似乎很好,但是當我在導航抽屜中單擊home選項時,每個選項卡中的片段似乎被剝離,每次單擊該選項時都會添加兩個選項卡。
private void selectItem(int position) {
Fragment fragment = new NullFragment();
switch (position){
case 0:
fragment = new HomeFragment();
break;
case 1:
//Placeholder
fragment = new PlanetFragment();
}
// update the main content by replacing fragments
if (fragment != null) {
FragmentManager fragmentManager = getFragmentManager();
fragmentManager.beginTransaction().replace(R.id.content_frame, fragment).commit();
// update selected item and title, then close the drawer
drawerListView.setItemChecked(position, true);
setTitle(drawerItemTitles[position]);
drawerLayout.closeDrawer(drawerListView);
} else {
// error in creating fragment
Log.e("MainActivity", "Error in creating fragment");
}
}
HomeFragment.java
public class HomeFragment extends Fragment implements ActionBar.TabListener {
AppSectionsPagerAdapter appSectionsPagerAdapter;
ViewPager viewPager;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState){
View rootView = null;
/*if(savedInstanceState == null){*/
rootView = inflater.inflate(R.layout.activity_home, container, false);
appSectionsPagerAdapter = new AppSectionsPagerAdapter(getFragmentManager());
final ActionBar actionBar = getActivity().getActionBar();
actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
viewPager = (ViewPager) rootView.findViewById(R.id.pager);
viewPager.setAdapter(appSectionsPagerAdapter);
viewPager.setOnPageChangeListener(new ViewPager.SimpleOnPageChangeListener() {
@Override
public void onPageSelected(int position) {
actionBar.setSelectedNavigationItem(position);
}
});
actionBar.addTab(
actionBar.newTab()
.setIcon(R.drawable.ic_sync_to_cloud)
.setTabListener(this));
actionBar.addTab(
actionBar.newTab()
.setIcon(R.drawable.ic_send_to_device)
.setTabListener(this));
actionBar.setDisplayShowHomeEnabled(false);
actionBar.setDisplayShowTitleEnabled(false);
return rootView;
}
@Override
public void onTabUnselected(ActionBar.Tab tab, FragmentTransaction fragmentTransaction) {
}
@Override
public void onTabSelected(ActionBar.Tab tab, FragmentTransaction fragmentTransaction) {
// When the given tab is selected, switch to the corresponding page in the ViewPager.
viewPager.setCurrentItem(tab.getPosition());
}
@Override
public void onTabReselected(ActionBar.Tab tab, FragmentTransaction fragmentTransaction) {
}
}
我想這是因爲HomeFragment的新實例每次創建,並在其佈局的唯一事情是一個ViewPager。有沒有辦法做到這一點,所以沒有創建一個新的實例,而是片段可以存儲和恢復。如果您需要查看更多代碼,請告知我們。
這似乎做的伎倆!非常感謝,我欠你一個。 – Unem
嗨@ntrrobng我有同樣的問題(問題1),但我使用標籤佈局,而不是ActionBar你能幫我嗎 – angel