我正在开发一款Android应用,其中一项活动包含stepper,包含3个步骤。我已经为每个步骤创建了一个布局,并以编程方式将其插入到我的活动的scrollview中。一步布局如下所示:
此处的蓝色矩形是每个步骤中不同的内容。第一步应该包含带有几个按钮的地图。我认为在活动之外创建一个片段来处理地图会更容易,只需在用户完成地图工作时将数据发送到活动。
我使用以下代码将每个步骤插入活动:
View step1, step2, step3; // they are global
//Inside onCreate:
LayoutInflater inflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
FrameLayout mainView = (FrameLayout) inflater.inflate(R.layout.activity_main, null);
LinearLayout parent = (LinearLayout) mainView.findViewById(R.id.stepper_container);
step1 = inflater.inflate(R.layout.layout_step, null);
parent.addView(step1);
step2 = inflater.inflate(R.layout.layout_step, null);
parent.addView(step2);
step3 = inflater.inflate(R.layout.layout_step, null);
parent.addView(step3);
setContentView(mainView);
我设法通过在活动中创建<FragmentLayout android:id="@+id/fragment_container" ... />"
并使用以下代码成功地将带有地图的片段插入活动:
FragmentManager fragmentManager = getSupportFragmentManager();
FragmentTransaction transaction = fragmentManager.beginTransaction();
OfficeMapFragment map = OfficeMapFragment.newInstance();
transaction.add(R.id.fragment_container, map);
transaction.commit();
但我无法通过新的以编程方式添加的视图作为其元素来实现。 id
是相同的,当我将交易中的id
参数更改为&#34;蓝色&#34;的id
时容器在步骤中,应用程序崩溃与NullPointerException。
Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'void com.google.android.gms.maps.SupportMapFragment.getMapAsync(com.google.android.gms.maps.OnMapReadyCallback)' on a null object reference
OfficeMapFragment
onCreateView方法:
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
View v = inflater.inflate(R.layout.fragment_map, container, false);
SupportMapFragment mapFragment = (SupportMapFragment) getChildFragmentManager()
.findFragmentById(R.id.map);
mapFragment.getMapAsync(this); // It crashes here
return v;
}
如何在一个以编程方式创建的视图中添加片段?