我有以下代码,它是一个带有 fragment 的选项卡布局。我想摆脱选项卡/寻呼机并仅保留 1 个 fragment (StickyQuestionDetailsFragment) 并让它显示 Activity 的完整宽度和高度。
我尝试从我的 Activity 中打开 fragment ,但出现转换异常。
public class QuestionDetails extends SherlockFragmentActivity implements ActionBar.TabListener {
ViewPager mPager;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.question_details);
PagerAdapter adapter = new FragmentStatePagerAdapter(getSupportFragmentManager()) {
@Override
public Fragment getItem(int position) {
switch (position) {
case 1:
return new QuickReturnFragment();
case 0:
return new StickyQuestionDetailsFragment();
}
return null;
}
@Override
public int getCount() {
return 1;//2
}
@Override
public CharSequence getPageTitle(int position) {
switch (position) {
case 0:
return "Question";
case 1:
return "User";
}
return null;
}
};
mPager = (ViewPager) findViewById(R.id.pager);
mPager.setAdapter(adapter);
mPager.setOnPageChangeListener(new ViewPager.SimpleOnPageChangeListener() {
@Override
public void onPageSelected(int position) {
getActionBar().setSelectedNavigationItem(position);
}
});
mPager.setPageMargin(getResources().getDimensionPixelSize(R.dimen.page_margin));
getActionBar().setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
for (int position = 0; position < adapter.getCount(); position++) {
getActionBar().addTab(getActionBar().newTab()
.setText(adapter.getPageTitle(position))
.setTabListener(this));
}
getActionBar().setDisplayShowHomeEnabled(false);
getActionBar().setDisplayShowTitleEnabled(false);
}
@Override
public void onTabSelected(ActionBar.Tab tab, FragmentTransaction fragmentTransaction) {
mPager.setCurrentItem(tab.getPosition());
}
@Override
public void onTabUnselected(ActionBar.Tab tab, FragmentTransaction fragmentTransaction) {
}
@Override
public void onTabReselected(ActionBar.Tab tab, FragmentTransaction fragmentTransaction) {
}
}
最佳答案
如果每个 Activity 只需要一个 Fragment,则可以使用此模式 ( source ):
public class QuestionDetails extends SherlockFragmentActivity {
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
// If not already added to the Fragment manager add it. If you don't do this a new Fragment will be added every time this method is called (Such as on orientation change)
if(savedInstanceState == null)
getSupportFragmentManager().beginTransaction().add(android.R.id.content, new StickyQuestionDetailsFragment()).commit();
}
}
关于java - 如何将选项卡 fragment Activity 转换为没有选项卡的正常 Activity ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17786475/