Ich arbeite an einer Android App mit einer Aktivität, die stepper mit 3 Schritten enthält. Ich habe für jeden Schritt ein Layout erstellt und programmatisch in die Scrollview meiner Aktivität eingefügt. Ein Schritt Layout sieht wie folgt aus:Karte innerhalb Fragment in programmatisch erstellte Ansicht
Das blaue Rechteck hier begnügt, die in jedem Schritt anders sein wird. Der erste Schritt sollte eine Karte mit den Schaltflächen enthalten. Ich dachte, dass es einfacher ist, ein Fragment zu erstellen, um mit der Karte außerhalb der Aktivität zu arbeiten, und einfach Daten an Aktivitäten zu senden, wenn der Benutzer mit der Map fertig ist.
I einzufügen, jeden Schritt zu der Aktivität mit diesem Code:
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);
I gelungen Fragment einzufügen mit einer Karte auf die Aktivität von einem <FragmentLayout android:id="@+id/fragment_container" ... />"
darin zu schaffen und den folgenden Code:
FragmentManager fragmentManager = getSupportFragmentManager();
FragmentTransaction transaction = fragmentManager.beginTransaction();
OfficeMapFragment map = OfficeMapFragment.newInstance();
transaction.add(R.id.fragment_container, map);
transaction.commit();
Aber ich kann es nicht mit neuen programmgesteuert hinzugefügt Ansichten als ihre Elemente id
sind die gleichen und wenn ich id
Parameter in Transaktion auf die id
des "blauen" Container i n Schritt stürzt die App mit NullPointerException ab.
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 Methode:
@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;
}
Q:
Wie das Fragment in einem der programmatisch erstellt Ansichten hinzufügen?