我对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>
我知道不应该使用硬编码字符串,但是在我让它运行后我会修复这个问题。
我尝试使用片段事务和激活按钮的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_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);)立即存在该片段。
是否有一种简单的方法在活动中以编程方式添加和删除具有用户界面的片段?