Frage

Ich lerne Android-Entwicklung.Ich bleibe bei etwas hängen, das eigentlich ganz einfach sein sollte.

Ich erstelle eine App mit einer Aktivität, 2 Fragmenten und 1 Schnittstelle.

android:minSdkVersion="11"
android:targetSdkVersion="19

In der Hauptaktivität versuche ich also, mithilfe des Managers einen Verweis auf Fragment B zu erstellen.Ich stecke hier fest, weil Eclispse mir sagt, ich solle einige Dinge ändern (siehe unten):

Meine Absicht:`

@Override
    public void respond(int i) {
        // TODO Auto-generated method stub

    FragmentManager manager =getFragmentManager();
    FragmentB f2= (FragmentB) manager.findFragmentById(R.id.fragment2);

}`

Wenn ich es auf diese Weise mache, erhalte ich Fehlermeldungen und muss einige Änderungen vornehmen.Nach den Änderungen sieht der Code so aus (und ich kann FragmentB immer noch nicht erreichen):

    @Override
public void respond(int i) {
    // TODO Auto-generated method stub

    android.app.FragmentManager manager =getFragmentManager();
    android.app.Fragment f2=  manager.findFragmentById(R.id.fragment2);

}

Für zusätzliche Details füge ich hier auch den Import-Header der Aktivität ein:

  package com.example.modular_ui;

import android.support.v7.app.ActionBarActivity;
import android.support.v7.app.ActionBar;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.app.Activity;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.os.Build;

public class MainActivity extends Activity implements Communicator{....

Was fehlt mir hier?Die ganze Sache mit support.v4/support.v7 ist für Anfänger etwas verwirrend.

BEARBEITEN:Nach dem Wechsel zu:

    import android.app.Fragment;
import android.app.FragmentManager;

UND durch Erweitern von FragmentActivity kann ich immer noch keinen Verweis auf FragmentB erstellen:

@Override
public void respond(int i) {
    // TODO Auto-generated method stub

FragmentManager man = getFragmentManager();
FragmentB b = man.findFragmentById(R.id.fragment2);

}

Wie gewünscht habe ich den FragmentB-Code gepostet:

package com.example.modular_ui;

import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;

public class FragmentB extends Fragment {

TextView text;

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    return inflater.inflate(R.layout.fragment_b, container);
}

@Override
    public void onActivityCreated(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onActivityCreated(savedInstanceState);
        text = (TextView) getActivity().findViewById(R.id.textView1);
    }

Haupt-XML

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/container"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="com.example.modular_ui.MainActivity"
    tools:ignore="MergeRootFrame" >

    <fragment
        android:id="@+id/fragment1"
        android:name="com.example.modular_ui.FragmentA"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />

    <fragment
        android:id="@+id/fragment2"
        android:name="com.example.modular_ui.FragmentB"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_below="@+id/fragment1"
        android:layout_marginTop="54dp" />

</RelativeLayout>
War es hilfreich?

Lösung

Zunächst einmal: Ihre Aktivität sollte die Fragmentierbarkeit erweitern.

Über Support-Bibliotheken.Sie wurden eingeführt, um ältere Androiden einiger Funktionalitäten hinzuzufügen.Zum Beispiel wurden Fragmente in Android 3.0 (SDK NR: 11) eingeführt.In der Tat (je nach Dokumentation) in Androids 3.0

Andere Tipps

Verwenden Sie einfach GetsUpportFragmentManager ();, nachdem Sie die Support-Bibliothek erfolgreich hinzugefügt haben.

op war so nah an einer Lösung, die für die API 11 und neuer ohne Bedarf unterstützt. V4 .

Er musste nur sein Fragment um auch nicht unterstützen.v4 in ihrer import -Anweisung zu ändern. <

Zusammenfassung der beiden Ansätze. Alle Ihre Aktivitäten und Fragmente sollten Code verfügen, der wie genau eins aussieht;Mischen Sie sie nicht!(In allen Dateien sind nicht alle Zeilen erforderlich. Verwenden Sie nach Bedarf Zeilen.)

support-v4-Ansatz

generasacodicetagpre.

API 11+ Ansatz

generasacodicetagpre.


Wenn Sie also ein Projekt haben, das mit einem oben genannten Ansatz geschrieben wird, und Sie integrieren Sie in anderswo in den Code, suchen Sie unbedingt nach diesen Zeilen und ändern Sie sie, um das, was Sie haben, anpassen.

Es ist einfach.

Wenn Sie möchten, dass Ihre App auch auf älteren Geräten (unter API-Level 11) läuft, verwenden Sie getSupportFragmentManager().

Wenn Sie möchten, dass Ihre App auf Geräten mit API-Level über 11 ausgeführt wird, verwenden SiegetFragmentManger().

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top