Android:将一个片段添加到一个活动

我对Android相当陌生,所以这可能有一个明显的答案,但我似乎无法find它。

我正在编写一个计算器应用程序的版本。 我想这样做,当用户点击其中一个button时,这将启动一个片段(有更多的button,他们可以用于更多的input)。

片段代码如下:

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> 

(我知道我不应该使用硬编码的string,但我会修复,一旦我得到的东西运行)

我尝试使用激活button的onTouch方法使用fragmenttransaction添加它,如下所示:

 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> 

但是这导致片段在创build活动时(setContentView(R.layout.main); run)一直存在。

有没有一种简单的方法来编程添加和删除一个用UI的片段到一个活动?

Solutions Collecting From Web of "Android:将一个片段添加到一个活动"

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

您可以将片段添加到您的相对布局中,但要正确地执行此操作,您需要为其分配适当的布局参数,以便放置它。 在包装其内容的相对布局中创buildFrameLayout会更容易,然后在那里添加片段。

 <?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);