如何使用以编程方式创建的内容视图向活动添加片段

如何使用以编程方式创建的内容视图向活动添加片段

我想将一个片段添加到以编程方式实现其布局的Activity。我查看了Fragment文档,但没有很多示例描述我需要的内容。这是我尝试编写的代码类型:

public class DebugExampleTwo extends Activity {

    private ExampleTwoFragment mFragment;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        FrameLayout frame = new FrameLayout(this);
        if (savedInstanceState == null) {
            mFragment = new ExampleTwoFragment();
            FragmentTransaction ft = getFragmentManager().beginTransaction();
            ft.add(frame.getId(), mFragment).commit();
        }

        setContentView(frame);
    }}

...

public class ExampleTwoFragment extends Fragment {

    @Override
    public View onCreateView(LayoutInflater inflater, 
                             ViewGroup container, 
                             Bundle savedInstanceState) {
        Button button = new Button(getActivity());
        button.setText("Hello There");
        return button;
    }}

此代码编译但在开始时崩溃,可能是因为我FragmentTransaction.add()的错误。这样做的正确方法是什么?


江户川乱折腾
浏览 416回答 3
3回答

墨色风雨

这是我在阅读Tony Wong的评论后想出的:public class DebugExampleTwo extends BaseActivity {     @Override     protected void onCreate(Bundle savedInstanceState) {         super.onCreate(savedInstanceState);         addFragment(android.R.id.content,                     new DebugExampleTwoFragment(),                     DebugExampleTwoFragment.FRAGMENT_TAG);     }}...public abstract class BaseActivity extends Activity {     protected void addFragment(@IdRes int containerViewId,                                @NonNull Fragment fragment,                                @NonNull String fragmentTag) {         getSupportFragmentManager()                 .beginTransaction()                 .add(containerViewId, fragment, fragmentTag)                 .disallowAddToBackStack()                 .commit();     }     protected void replaceFragment(@IdRes int containerViewId,                                    @NonNull Fragment fragment,                                    @NonNull String fragmentTag,                                    @Nullable String backStackStateName) {         getSupportFragmentManager()                 .beginTransaction()                 .replace(containerViewId, fragment, fragmentTag)                 .addToBackStack(backStackStateName)                 .commit();     }}...public class DebugExampleTwoFragment extends Fragment {     public static final String FRAGMENT_TAG =          BuildConfig.APPLICATION_ID + ".DEBUG_EXAMPLE_TWO_FRAGMENT_TAG";     // ...}科特林如果您正在使用Kotlin,请务必查看Google提供的Kotlin扩展程序,或者只编写您自己的扩展程序。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Android