由android.support.v4.app.FragmentActivity和android.app.FragmentTransaction混淆

时间:2014-11-25 11:40:58

标签: android

我对支持包android.support.v4.app感到有些困惑,因为 我实现了一个扩展android.support.v4.app.FragmentActivity的类并注意到了 它有方法期望android.app.FragmentTransaction作为参数。 他们为什么不期待android.support.v4.app.FragmentTransaction呢?

我仍然没有区分FragmentDialogFragmentFragmentManager等。 从支持包比常规包。我何时必须使用什么?

我在常规软件包中实现了DialogFragment,并在我的所有软件包中使用它 当我必须向用户发出警报时的活动。不幸的是现在我必须写 antother 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也来自支持包,因为它们不存在于常规包中。

1 个答案:

答案 0 :(得分:0)

我写的所有应用都需要支持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