如何在Android中从活动调用片段?

13

我正在处理 Android Fragments,在我的应用程序中遇到了关于活动(Activity)片段(Fragment)的问题。也就是说,在Fragment1中创建了一个按钮(Button)并在该按钮(Button)单击时调用Activity1。然后在Activity1中创建了另一个按钮(Button)并调用了Activity2。 现在从Activity2中,我调用了Activity1,并且从Activity1中,我正在尝试调用Fragment1。但它在id处显示错误(有人可以告诉我需要给哪个id吗?)。我在Google上研究了如何从Activity中调用Fragment,但是我没有找到任何解决方案。请帮我解决这个问题。提前致谢。

我的代码:

Activity1.class

public void back(View v) {
MyFragment1 fragmentS1 = new MyFragment1();
getFragmentManager().beginTransaction().replace(android.R.id.frame_container, fragmentS1).commit();
}

日志记录错误:

04-10 10:55:28.876: E/AndroidRuntime(22103): FATAL EXCEPTION: main
04-10 10:55:28.876: E/AndroidRuntime(22103): java.lang.IllegalArgumentException: No view found for id 0x7f0a0004 (com.vizteck.navigationdrawer:id/frame_container) for fragment Fragment1{429cba90 #0 id=0x7f0a0004}
04-10 10:55:28.876: E/AndroidRuntime(22103):    at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:895)
04-10 10:55:28.876: E/AndroidRuntime(22103):    at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:1075)
04-10 10:55:28.876: E/AndroidRuntime(22103):    at android.app.BackStackRecord.run(BackStackRecord.java:682)
04-10 10:55:28.876: E/AndroidRuntime(22103):    at android.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1455)
04-10 10:55:28.876: E/AndroidRuntime(22103):    at android.app.FragmentManagerImpl$1.run(FragmentManager.java:441)
04-10 10:55:28.876: E/AndroidRuntime(22103):    at android.os.Handler.handleCallback(Handler.java:725)
04-10 10:55:28.876: E/AndroidRuntime(22103):    at android.os.Handler.dispatchMessage(Handler.java:92)
04-10 10:55:28.876: E/AndroidRuntime(22103):    at android.os.Looper.loop(Looper.java:137)
04-10 10:55:28.876: E/AndroidRuntime(22103):    at android.app.ActivityThread.main(ActivityThread.java:5283)
04-10 10:55:28.876: E/AndroidRuntime(22103):    at java.lang.reflect.Method.invokeNative(Native Method)
04-10 10:55:28.876: E/AndroidRuntime(22103):    at java.lang.reflect.Method.invoke(Method.java:511)
04-10 10:55:28.876: E/AndroidRuntime(22103):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1102)
04-10 10:55:28.876: E/AndroidRuntime(22103):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:869)
04-10 10:55:28.876: E/AndroidRuntime(22103):    at dalvik.system.NativeStart.main(Native Method)

为了实现松耦合,你应该使用接口概念。 - Umang Kothari
你提到了你遇到了错误。但是你的logcat错误在哪里?@Amrutha - GrIsHu
5个回答

8
尝试这样做...
android.R.id.frame_container 中移除 android。
如果你正在使用 activity1 extends Activity,则使用 getFragmentManager(),如果你正在使用 activity1 extends FragmentActivity,则使用 getSupportFragmentManager()
像下面一样。
MyFragment1 fragmentS1 = new MyFragment1();
getSupportFragmentManager().beginTransaction().replace(R.id.frame_container, fragmentS1).commit();

getFragmentManager()已被弃用。 - Akito

6
Fragment frag;
FragmentManager fm1 = MainActivity.this
    .getSupportFragmentManager();
FragmentTransaction ft1 = fm1.beginTransaction();
frag = new Animal_Activity();
ft1.replace(R.id.activity_main_content_fragment, frag);
ft1.commit();

4
请在您的活动中按以下方式编写:
Fragment fragment = new YourFragment();
FragmentManager fragmentManager = getSupportFragmentManager();
FragmentTransaction transaction = fragmentManager.beginTransaction();
transaction.replace(R.id.output1, fragment);
transaction.addToBackStack(null);
transaction.commit();

2

你可以这样调用:

Fragment fragment = new FragmentName(); 
FragmentManager fragmentManager = ((Activity) context).getFragmentManager();
fragmentManager.beginTransaction().replace(R.id.fragment_main, fragment).commit();

1
做这个:-
FragmentManager fragmentManager = getFragmentManager();
            FragmentTransaction fragmentTransaction = fragmentManager
                    .beginTransaction();
            MyFragment1 fragmentS1 = new MyFragment1();
            fragmentTransaction.replace(R.id.realtabcontent, mBarcodeScreen);
            fragmentTransaction.commit();

祝你好运!!


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接