如何从 Activity 启动 Fragment?

Posted

技术标签:

【中文标题】如何从 Activity 启动 Fragment?【英文标题】:How to start Fragment from Activity? 【发布时间】:2015-08-05 10:10:23 【问题描述】:

我有一个片段:

ProductsFragments extends Fragment

还有一个活动

AdminMenuActivity extends ActionBarActivity

我想从 AdminMenuActivity 调用 ProductsFragments。我使用了 2 个选项:

1)

FragmentManager fm = getSupportFragmentManager();
                for(int i = 0; i < fm.getBackStackEntryCount(); ++i) 
                    fm.popBackStack();
                
                FragmentTransaction tx = getSupportFragmentManager().beginTransaction();
                tx.replace(R.id.frame_layout, android.support.v4.app.Fragment.instantiate(AdminMenuActivity.this, fragments[1]));
                tx.commit();

2)

Intent intent1 = new Intent(AdminMenuActivity.this, ProductsActivity.class);
                startActivity(intent1);

两者都失败了。我不想用 FragmentActivity 扩展 ProductsFragments 因为它没有给我supportedActionBar v7

那我怎么打电话给Fragment

【问题讨论】:

【参考方案1】:

这是从 Activity 内部调用片段的方式

Fragment fr = new FirstFragment();
fr.setArguments(args);
FragmentManager fm = getFragmentManager();
FragmentTransaction fragmentTransaction = fm.beginTransaction();
fragmentTransaction.replace(R.id.fragment_place, fr);
fragmentTransaction.commit();

假设你有 fragment_place 代表如下:

<fragment android:name="com.company.appName.fragments.FirstFragment"
        android:id="@+id/fragment_place"
        android:layout_
        android:layout_ />

【讨论】:

【参考方案2】:

如果你得到

第二个参数类型错误。找到:'android.support.v4.app.Fragment', 必需:'android.app.Fragment'

这个错误,检查导入,你可能会发现如下,

import android.app.FragmentManager;
import android.app.FragmentTransaction;

删除上述导入。 将getFragmentManager()改为getSupportFragmentManager()

FragmentManager fragmentManager=getFragmentManager(); to
FragmentManager fragmentManager=getSupportFragmentManager();

现在我们可以导入了,

import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;

【讨论】:

以上是关于如何从 Activity 启动 Fragment?的主要内容,如果未能解决你的问题,请参考以下文章

[Android Studio]如何从Fragment中嵌套的Recycleview启动一个Activity?

Intent 不会从 Fragment 启动 Activity

如何从 Back Press 的 Activity 中返回 Fragment

使用 Transition 从 Fragment 启动 Activity(API 21 支持)

Android如何成功截击请求,如何将数据从Activity传递到Fragment?

使用 Activity 启动 Fragment 会更好吗?