Android:向活动添加片段

时间:2012-05-02 18:54:18

标签: android user-interface android-activity fragment

我对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)。

是否有一种简单的方法可以通过编程方式向活动添加和删除带有UI的片段?

2 个答案:

答案 0 :(得分:11)

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

答案 1 :(得分:0)

在活动中使用简单的代码

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