簡體   English   中英

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

[英]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呢?

與常規包相比,我仍然沒有從支持包中得到FragmentDialogFragmentFragmentManager等之間的區別。 我什么時候必須使用什么?

例如,我從常規包中實現了一個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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM