试图创建一个按钮来打开片段(Android)

时间:2014-09-19 15:17:59

标签: android android-intent android-activity android-fragments

所以我基本上在'DemosFragment'中有一个按钮,当我点击它时,我希望它打开另一个片段(SettingsFragment),我现在明白我需要一个活动来解决这个问题,因为该按钮目前有一个onClick使用intent / startActivity的方法,那么我将如何创建一个只保存我的片段的活动?我知道这可能听起来很奇怪我写的方式,我刚刚开始Android开发,但基本上我有一个片段,因为我想要一个片段有一个按钮来打开另一个片段,我想我需要一个片段的活动我是试图打开,那么如何创建该活动以及我需要将其放入其中?感谢。

3 个答案:

答案 0 :(得分:0)

您需要具有以下代码的活动:

public class ShowFragmentActivity extends Activity {

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_show_fragment);
    }
}

您还必须在res / layout文件夹中创建名为activity_show_fragment.xml的布局xml文件:

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <fragment class="com.example.yourFragmentsClassName"
        android:id="@+id/fragment_id"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />

</FrameLayout>

这应该只用于显示你的片段。 要启动活动,请将此代码粘贴到按钮的onClick方法中:

Intent i = new Intent(this, ShowFragmentActivity.class);
startActivity(i);

查看官方文档总是一个很好的决定:http://developer.android.com/reference/android/app/Fragment.html。 希望有所帮助!

答案 1 :(得分:0)

哇!你的问题需要一个很长的答案,然而这是一个很好的做法(也是疯狂的),Fragments不能在彼此之间进行通信,但它们可以由一个Activity托管;在这种情况下,Activity可以管理它们之间的通信流(片段),并且可以通过多种方式开发,Bundle,Intent和Handler。在这里查看ufficial Android文档:

http://developer.android.com/training/basics/fragments/index.html

答案 2 :(得分:0)

有关构建灵活用户界面的android docs部分是如何从Fragment开始/加载Activity的一个很好的示例。在该示例中,您将看到FrameLayout XML中的Activity被用作片段容器。这将是显示所有片段的View

使用FragmentTransaction加载片段时,片段布局的内容将显示在容器视图中。在上面引用的示例中,这是使用android支持库中包含的SupportFragmentManager类进行的,以便在早期版本的操作系统中促进片段事务。 SupportFramgnetManager要求您扩展FramentActivity而不仅仅是Activity。如果您不担心向后兼容性并且正在扩展活动,而不是片段活动,则可以简单地使用getFragmentManager()。

 getFragmentManager().beginTransaction()
                .add(R.id.fragment_container, firstFragment).commit();

在初始添加事务之后,您可以使用片段事务的replace方法在片段之间切换。替换完全听起来像它,它将一个片段换成另一个片段。要在你的firstframgnet中使用

完成此任务
 SecondFragment secondFragment = new SecondFragment();
 getActivity().getFragmentManager().beginTransaction()
                .replace(R.id.fragment_container, secondFragment).commit();

请注意,我在片段中使用了getActivity()。这允许您引用主机活动的上下文来访问片段管理器。当您在活动中时,您不需要使用getactivity,因为片段管理器已经可以从该上下文访问。