Android:向活动中添加片段

Android:向活动中添加片段,android,user-interface,android-activity,fragment,Android,User Interface,Android Activity,Fragment,我对Android相当陌生,所以这可能有一个明显的答案,但我似乎找不到 我正在编写一个计算器应用程序的版本。我想这样做,当用户点击其中一个按钮时,就会启动一个片段(上面有更多的按钮,他们可以使用这些按钮进行更多的输入) 片段代码如下所示: import android.app.Fragment; import android.os.Bundle; import android.view.LayoutInflater; import android.view.View; import androi

我对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 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>
使用XML布局,如下所示:

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 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>
但这导致了一个错误,即“没有为id:…(main)找到fragment 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)时片段就在那里


有没有一种简单的方法可以通过编程将带有UI的片段添加和删除到活动中?

这里的问题是,片段需要一个具有视图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>

在活动中使用简单代码

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

+1 . @斯宾塞:另外,如果你的片段可以作为一个单独的活动,你可以将其更改为扩展FragmentActivity,并将其视为一个常规活动。非常感谢,这非常有效。我认为FragmentActivity在这种情况下不起作用,但我会在将来记住这个选项。