安卓:添加一个片段活动(Android: Adding a fragment to an activ

2019-06-24 03:35发布

我是相当新到Android,所以这可能有一个明显的答案,但我似乎无法找到它。

我正在写一个版本计算器应用程序的。 我想使它这样,当用户点击一个按钮,这将启动一个片段(上面有更多的按钮,他们就可以使用更多的输入)。

所述片段代码如下:

import android.app.Fragment;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

public class VariableMenu extends Fragment {
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);}

    public void onActivityCreated(Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);

    }
     public View onCreateView(LayoutInflater inflater, ViewGroup container,
             Bundle savedInstanceState) {

         return inflater.inflate(R.layout.fragment, container, false);
}

}

使用一个XML布局如下:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >

<Button
        android:id="@+id/Bx"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="X" 
        android:onClick="onButtonClicked"/>
    <Button
        android:id="@+id/By"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_toRightOf="@id/Bx"
        android:layout_alignTop="@id/Bx"
        android:text="Y" 
        android:onClick="onButtonClicked"/>
    <Button
        android:id="@+id/Bz"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_toRightOf="@id/By"
        android:layout_alignTop="@id/By"
        android:text="Z" 
        android:onClick="onButtonClicked"/>

</RelativeLayout>

(我知道我不应该使用硬编码字符串中,但我会解决,一旦我得到的东西跑了)

我试图具有它添加使用fragmenttransaction与激活按钮的onTouch方法,像这样:

public void onFragmentActivated(View v) {
        FragmentManager fragmentManager = getFragmentManager();
        FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
        VariableMenu fragment = new VariableMenu();
        fragmentTransaction.add(R.layout.main, fragment);
        fragmentTransaction.commit();
    }

但给了一个错误,说有“找到的ID号视图。对于片段VariableMenu ...(主)”

于是我的主XML文件中提出了看法吧:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">

(Irrelevant things)

    <fragment
        android:id="@+id/Fragment"
        android:name="calculator.app.VariableMenu"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@id/B1"/>

(Irrelevant things)

</RelativeLayout>

但是,这只要活动创建导致片段在那里(和的setContentView(R.layout.main); RAN)。

有一个简单的方法以编程方式与用户界面的活动添加和删除片段?

Answer 1:

这里的问题是,该片段需要一个容器用视图id驻留内。 给它一个布局ID将导致您看到的错误。

您可以将片段添加到您的相对布局,但要做到这一点正确你需要给它分配适当的布局参数,以便它可以被放置。 这将是容易,只需创建一个包装的内容相对布局内的FrameLayout,然后添加片段存在。

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">

    <FrameLayout
        android:id="@+id/FragmentContainer"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@id/B1"/>

</RelativeLayout>

然后

fragmentTransaction.add(R.id.FragmentContainer, fragment);


Answer 2:

使用简单的代码在你的活动

getSupportFragmentManager().beginTransaction().add(R.id.yourcontainer,new yourfragment).commit();


文章来源: Android: Adding a fragment to an activity