![](/img/trans.png)
[英]What does android.support.v4.app.FragmentActivity extend?
[英]Confused by android.support.v4.app.FragmentActivity and android.app.FragmentTransaction
我对支持包android.support.v4.app
有点困惑,因为我实现了一个扩展android.support.v4.app.FragmentActivity
的类,并注意到它具有将android.app.FragmentTransaction
作为参数的方法。 为什么他们不期待android.support.v4.app.FragmentTransaction
呢?
与常规包相比,我仍然没有从支持包中得到Fragment
, DialogFragment
和FragmentManager
等之间的区别。 我什么时候必须使用什么?
例如,我从常规包中实现了一个DialogFragment
,并在必须向用户发出警报时在所有活动中使用它。 不幸的是,现在我不得不从支持包中编写另DialogFragment
实现超类型的DialogFragment
,因为我得到了一些正在使用支持包中的实现的片段。 我无法更改它们,因为它们不适合我。
public class DiagramsActivity extends FragmentActivity implements TabListener, OnPageChangeListener {
private ViewPager viewPager = null;
private FragmentPagerAdapter fragmentPager = null;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
this.fragmentPager = new DiagramsFragmentPagerAdapter(this.getSupportFragmentManager());
this.setContentView(R.layout.activity_diagrams);
this.viewPager = (ViewPager) this.findViewById(R.id.diagrams_pager);
this.viewPager.setOnPageChangeListener(this);
this.viewPager.setAdapter(this.fragmentPager);
this.actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
this.actionBar.addTab(actionBar.newTab().setText(this.getResources().getString(R.string.text_line)).setTabListener(this));
this.actionBar.addTab(actionBar.newTab().setText(this.getResources().getString(R.string.text_bar)).setTabListener(this));
this.actionBar.addTab(actionBar.newTab().setText(this.getResources().getString(R.string.text_scatter)).setTabListener(this));
this.actionBar.addTab(actionBar.newTab().setText(this.getResources().getString(R.string.text_pie)).setTabListener(this));
}
@Override
public void onTabSelected(Tab tab, android.app.FragmentTransaction fragmentTransaction) {
this.viewPager.setCurrentItem(tab.getPosition());
}
@Override
public void onTabUnselected(Tab tab, android.app.FragmentTransaction fragmentTransaction) {}
@Override
public void onTabReselected(Tab tab, android.app.FragmentTransaction fragmentTransaction) {}
@Override
public void onPageScrollStateChanged(int state) {}
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {}
@Override
public void onPageSelected(int position) {
this.actionBar.setSelectedNavigationItem(position);
}
private void performChooseDates() {
FragmentTransaction fragmentTransaction = this.getSupportFragmentManager().beginTransaction();
MeasureDataSelectionDialogFragment measureDataGetSelectionDialogFragment = new MeasureDataSelectionDialogFragment();
measureDataGetSelectionDialogFragment.setCallback(this);
measureDataGetSelectionDialogFragment.show(fragmentTransaction, null);
}
}
FragmentActivity
来自支持包。 TabListener
的方法都需要android.app.FragmentTransaction
所以我的方法performChooseDates()
。 因此,从我的角度来看,我的支持包和常规包很难混合使用。 代码中提到的Viewpager和FragmentPagerAdapter也来自支持包,因为它们不存在于常规包中。
我编写的所有应用都需要直接支持Android 2.3,这是最简单的方法。 如果您支持11+,请坚持使用android.app.Fragment
。
android.support.v4.app.Fragment
是android支持库中的Fragment类,它是一个兼容性软件包,允许您在旧版 Android上使用Android的某些新功能。 android.support.v4.app.Fragment
是一个库,您可以使用该库来获得旧版API的向后兼容性。
android.app.Fragment
是Android SDK本机版本中的Fragment类。 它是在API 11
中引入的。 如果要使您的应用使用片段,并希望在API 11之前定位设备,则必须使用android.support.v4.app.Fragment
。 如果您仅定位运行API 11或更高版本的设备,则可以使用android.app.Fragment
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.