这是一个使用兼容包的小型Android 2.2测试应用程序。以下是我(错误的)尝试在接收点击时替换Fragment的方式。我试图用同一Fragment类的新(不同)实例替换它。正如我将要解释的那样,它不像预期的那样工作,我需要帮助:
public class MainFragmentActivity extends FragmentActivity {
...
public void myAction(View view) {
...
RightFragment newRightFrag = RightFragment.newInstance(myNewOption);
FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
ft.setCustomAnimations(android.R.anim.fade_in, android.R.anim.fade_out);
ft.replace(R.id.landscape_right_fragment, newRightFrag);
ft.commit();
}
}
你肯定已经看到了我的错误。无论如何,让我们更详细地解释一下应用程序应该做什么:
横向屏幕方向:
--------- ----------
| L | R | -> click -> | L | R2 |
--------- ----------
在横屏模式下,该活动具有包含2个片段的视图:“leftLand”和“rightLand”,如果你单击片段“leftLand”的一个按钮,则会创建一个新的片段,并将“rightLand”片段实例替换为同一FragamentActivity类的另一个实例。这两个实例之间的区别是传递给“newInstance(int)”方法的参数,它基于单击的按钮。
纵向方向:
----- -----
| | | |
| L | -> click -> | R |
| | | |
----- -----
在竖屏模式下,它只显示片段"leftPort"(与"leftLand"布局相同),如果您点击其按钮,则启动一个Intent并启动RightFragmentActivity,该Activity显示片段 "rightLand"。
如果我不替换右侧片段,它可以正常工作。但是,如果我这样做了(在横屏模式下单击按钮),则在后续方向更改(重新启动Activity)时,由于"IllegalStateException: Fragment RightFragment did not create a view
"错误,FragmentActivity无法启动:
D/AndroidRuntime( 1428): Shutting down VM
W/dalvikvm( 1428): threadid=1: thread exiting with uncaught exception (group=0x4001d800)
E/AndroidRuntime( 1428): FATAL EXCEPTION: main
E/AndroidRuntime( 1428): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.agm.test/com.agm.test.MainFragmentActivity}: android.view.InflateException: Binary XML file line #13: Error inflating class fragment
E/AndroidRuntime( 1428): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2663)
E/AndroidRuntime( 1428): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679)
E/AndroidRuntime( 1428): at android.app.ActivityThread.handleRelaunchActivity(ActivityThread.java:3815)
E/AndroidRuntime( 1428): at android.app.ActivityThread.access$2400(ActivityThread.java:125)
E/AndroidRuntime( 1428): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2037)
E/AndroidRuntime( 1428): at android.os.Handler.dispatchMessage(Handler.java:99)
E/AndroidRuntime( 1428): at android.os.Looper.loop(Looper.java:123)
E/AndroidRuntime( 1428): at android.app.ActivityThread.main(ActivityThread.java:4627)
E/AndroidRuntime( 1428): at java.lang.reflect.Method.invokeNative(Native Method)
E/AndroidRuntime( 1428): at java.lang.reflect.Method.invoke(Method.java:521)
E/AndroidRuntime( 1428): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
E/AndroidRuntime( 1428): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
E/AndroidRuntime( 1428): at dalvik.system.NativeStart.main(Native Method)
E/AndroidRuntime( 1428): Caused by: android.view.InflateException: Binary XML file line #13: Error inflating class fragment
E/AndroidRuntime( 1428): at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:582)
E/AndroidRuntime( 1428): at android.view.LayoutInflater.rInflate(LayoutInflater.java:618)
E/AndroidRuntime( 1428): at android.view.LayoutInflater.inflate(LayoutInflater.java:407)
E/AndroidRuntime( 1428): at android.view.LayoutInflater.inflate(LayoutInflater.java:320)
E/AndroidRuntime( 1428): at android.view.LayoutInflater.inflate(LayoutInflater.java:276)
E/AndroidRuntime( 1428): at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:198)
E/AndroidRuntime( 1428): at android.app.Activity.setContentView(Activity.java:1647)
E/AndroidRuntime( 1428): at com.agm.test.MainFragmentActivity.onCreate(MainFragmentActivity.java:25)
E/AndroidRuntime( 1428): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
E/AndroidRuntime( 1428): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2627)
E/AndroidRuntime( 1428): ... 12 more
E/AndroidRuntime( 1428): Caused by: java.lang.IllegalStateException: Fragment com.agm.test.RightFragment did not create a view.
E/AndroidRuntime( 1428): at android.support.v4.app.FragmentActivity.onCreateView(FragmentActivity.java:287)
E/AndroidRuntime( 1428): at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:558)
E/AndroidRuntime( 1428): ... 21 more
W/ActivityManager( 59): Force finishing activity com.agm.test/.MainFragmentActivity
我意识到旧的 "RightFragment" 在被替换后没有被销毁。这可能是我错误地尝试替换它的结果。非常感谢任何帮助。
提前致谢!
/ Angel Galindo Muñoz