Android:向活动添加片段
Posted
技术标签:
【中文标题】Android:向活动添加片段【英文标题】:Android: Adding a fragment to an activity 【发布时间】:2012-05-12 07:00:20 【问题描述】:我对 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_
android:layout_
android:orientation="vertical" >
<Button
android:id="@+id/Bx"
android:layout_
android:layout_
android:text="X"
android:onClick="onButtonClicked"/>
<Button
android:id="@+id/By"
android:layout_
android:layout_
android:layout_toRightOf="@id/Bx"
android:layout_alignTop="@id/Bx"
android:text="Y"
android:onClick="onButtonClicked"/>
<Button
android:id="@+id/Bz"
android:layout_
android:layout_
android:layout_toRightOf="@id/By"
android:layout_alignTop="@id/By"
android:text="Z"
android:onClick="onButtonClicked"/>
</RelativeLayout>
(我知道我不应该使用硬编码的字符串,但是一旦我运行它就会解决这个问题)
我尝试使用带有激活按钮的 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:...(main) 的视图。”
然后我在主 XML 文件中为它创建了一个视图:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_
android:layout_>
(Irrelevant things)
<fragment
android:id="@+id/Fragment"
android:name="calculator.app.VariableMenu"
android:layout_
android:layout_
android:layout_below="@id/B1"/>
(Irrelevant things)
</RelativeLayout>
但这导致片段在活动创建后立即存在(并且 setContentView(R.layout.main); 运行)。
是否有一种简单的方法可以以编程方式向 Activity 添加和删除带有 UI 的片段?
【问题讨论】:
【参考方案1】:这里的问题是片段需要一个带有视图 id 的容器来驻留。给它一个布局 id 会导致你看到的错误。
您可以将片段添加到您的相对布局中,但要正确执行此操作,您需要为其分配适当的布局参数以便可以放置它。在包含其内容的相对布局中创建一个 FrameLayout 会更容易,然后在其中添加片段。
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_
android:layout_>
<FrameLayout
android:id="@+id/FragmentContainer"
android:layout_
android:layout_
android:layout_below="@id/B1"/>
</RelativeLayout>
然后
fragmentTransaction.add(R.id.FragmentContainer, fragment);
【讨论】:
+1 。 @Spencer 同样,如果您的片段可以充当单独的活动,您可以将其更改为扩展 FragmentActivity 并将其视为常规活动 非常感谢,效果很好。我不认为 FragmentActivity 在这种情况下会起作用,但我会在未来记住这个选项。【参考方案2】:在您的活动中使用简单的代码
getSupportFragmentManager().beginTransaction().add(R.id.yourcontainer,new yourfragment).commit();
【讨论】:
以上是关于Android:向活动添加片段的主要内容,如果未能解决你的问题,请参考以下文章