【发布时间】:2016-10-14 23:58:27
【问题描述】:
我有一个包含一些元素的主要活动。其中之一是按钮。我想在单击按钮时加载片段。我希望 Fragment 覆盖整个 Activity,而不仅仅是在其中的布局中。然后在 Fragment 中还有一个 Button,它必须加载另一个覆盖所有内容的 Fragment,然后是另一个,依此类推。
所以我在 Activity 上设置了一个 OnClickListener 来加载第一个片段。活动加载得很好。如果我单击其他活动的按钮,一切都很好。但是无论我尝试什么,当我单击应该加载片段的按钮时它总是崩溃。
这里是主Activity的代码:
public class SignUpActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_sign_up);
Button next = (Button) findViewById(R.id.button_next_name);
next.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
FragmentManager fragmentManager = getSupportFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
SignNameFragment nameFragment = new SignNameFragment();
fragmentTransaction.add(PROBABLY_WHAT_I_AM_DOING_WRONG,nameFragment);
fragmentTransaction.addToBackStack(null);
fragmentTransaction.commit();
}
});
}
}
所有的 xml 都差不多。 Activity 的 RelativeLayout,Fragments 的 FrameLayout 和 ScrollView、ImageView、EditText、TextView 和所有这些的 Button。
目前我根据网上的建议尝试过的事情:
- 主Activity 的xml 使用RelativeLayout。我尝试在其中加载 Fragment,但失败了
- 我把它改成了 FrameLayout
- 我使用了 fragmentTransaction.add(R.id.fragment_container,nameFragment)
- 我没有使用 add(),而是尝试了 replace(R.id.activity_sign_up,nameFragment)
- 扩展到 FragmentActivity
- 在我的主 Activity 的 xml 中将 FrameLayout 设置为 Fragment 容器
我相信我的错误是我没有以正确的方式设置要添加片段的位置。
我很确定这将是一个新手错误,但我以前从未使用过 Fragments。那么有什么建议吗?
谢谢
编辑: 这是我点击按钮时的错误
E/AndroidRuntime: 致命异常: main 进程:be.test.test,PID:16763 java.lang.RuntimeException: be.test.test.SignUpActivity@276634a3 必须实现 OnFragmentInteractionListener 在 layout.SignNameFragment.onAttach(SignNameFragment.java:84) 在 android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1043) 在 android.support.v4.app.BackStackRecord.setLastIn(BackStackRecord.java:838) 在 android.support.v4.app.BackStackRecord.calculateFragments(BackStackRecord.java:861) 在 android.support.v4.app.BackStackRecord.run(BackStackRecord.java:719) 在 android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1677) 在 android.support.v4.app.FragmentManagerImpl$1.run(FragmentManager.java:536) 在 android.os.Handler.handleCallback(Handler.java:739) 在 android.os.Handler.dispatchMessage(Handler.java:95) 在 android.os.Looper.loop(Looper.java:145) 在 android.app.ActivityThread.main(ActivityThread.java:6145) 在 java.lang.reflect.Method.invoke(本机方法) 在 java.lang.reflect.Method.invoke(Method.java:372) 在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1399) 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1194)
【问题讨论】:
-
你为什么不发布错误?
-
如果您不需要 OnFragmentInteractionListener,您可以将其完全移除。