android.il supporto.v4.app.FragmentManager O android.app.FragmentManager?

Sto imparando lo sviluppo di Android. Mi si blocca a qualcosa che dovrebbe essere molto facile.

Im creazione di un’Applicazione con una Attività, 2 frammenti e 1 interfaccia.

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

Così nell’attività principale Im cercando di creare un riferimento a un Frammento B con il manager. Mi si blocca qui, perché Eclispse mi dice di cambiare alcune cose (vedi sotto):

Mia intensione:`

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

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

}`

Se io faccio questa strada ricevo i messaggi di errore e la necessità di eseguire alcune modifiche. Dopo le modifiche del codice simile a questo (e io ancora non riesco a raggiungere FragmentB):

    @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);

}

Per dettagli aggiuntivi metto qui anche l’importazione di intestazione dell’Attività:

  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{....

Quello che mi manca qui? l’intero supporto.v4 /supporto.v7 cosa è un po ‘ di confusione per i principianti.

MODIFICA:
Dopo la modifica:

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

E si estende FragmentActivity io ancora non riesco a creare un riferimento per FragmentB:

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

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

}

Come Richiesto ho inviato il FragmentB codice:

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);
    }

Principale 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>
La libreria di supporto è principalmente per sostenere la ActionBar e un paio di altre caratteristiche che non erano supportati fino API 11. Se si dispone di un min API di 11 vorrei solo usare la libreria per evitare di aggiungere inutili di massa. A meno che c’è qualcosa che ignoro.
Grazie per la vostra risposta rapida. Eclipse implementa automaticamente il supporto lib. Quindi, si consiglia di cambiare il presente per: import android.app.Frammento; import android.app.FragmentManager;
Si possono usare entrambi, ma non credo che c’è bisogno, se il vostro posto di API superiore a 11 o superiore, come tutto ciò che (che io sappia) è supportato con le librerie native in quel punto. Se questo è il caso, si tratta solo di massa nel vostro app e può causare un mal di testa cercando di ricordare che si sta utilizzando.

OriginaleL’autore Foo | 2014-04-13

4 Replies
  1. 4

    Prima di tutto: la vostra attività dovrebbe estendere FragmentActivity.

    Sulle librerie di supporto. Essi sono stati introdotti per aggiungere alcune funzionalità per anziani Androidi. Per esempio Frammenti sono state introdotte in Android 3.0 (SDK nr: 11). Infatti, in base alla documentazione) in Android 3.0 < sostenere la biblioteca utilizza l’implementazione del sistema di Frammenti.

    Grazie, ma senza successo (vedi la mia modifica)
    Puoi postare il codice per la creazione e l’attacco FragmentB? Inoltre, la principale attività di xml sarebbe utile.
    Ho aggiunto queste cose sotto
    Il frammento estende il supporto della biblioteca frammento. Variazione import android.il supporto.v4.app.Frammento; import android.app.Frammento; in FragmentB
    Superata la risposta. Perché OP è il targeting API 11 e più recente, non è necessario il supporto v4 roba, e quindi non ha bisogno di FragmentActivity (che fa parte di supporto v4). Come RobertM dice, reale il problema è che il suo Frammento ha fatto import android.support.v4.app.Fragment;, Quindi, impegnandosi a questo vecchio approccio. Strappare tutti i riferimenti a support.v4. Basta dire import android.app.Fragment; un Frammento esempio da sviluppatore.android o altrove, che non dice support.v4 ovunque. Poi si può semplicemente dire getFragmentManager().

    OriginaleL’autore RobertM

  2. 9

    Semplicemente utilizzare getSupportFragmentManager(); , dopo aver aggiunto la libreria di supporto con successo.

    grazie, questo mi ha aiutato mio problema!

    OriginaleL’autore bgauryy

  3. 6

    OP era così vicino ad avere una soluzione che avrebbe funzionato bene per API 11 e successive senza bisogno di supporto.v4.

    Ha solo bisogno di cambiare il suo Frammento a non utilizzare il supporto.v4, nella sua importazione istruzione.

    Sintesi dei due approcci. TUTTE le vostre Attività e Frammenti dovrebbe avere un codice che appare come esattamente uno di questi; non mescolare! (Non tutte le linee sono necessari in tutte le file; uso di linee).

    supporto-v4 approccio

    import android.support.v4.app.FragmentActivity;
    import android.support.v4.app.Fragment;      <-- ".support.v4"
    import android.support.v4.app.FragmentManager;
    
    ... MainActivity extends FragmentActivity ...
    
    ... = getSupportFragmentManager();
    
    .... YourFragment extends Fragment ... <-- same in both approaches

    API 11+ approccio

    import android.app.Activity;
    import android.app.Fragment;
    import android.app.FragmentManager;
    
    ... MainActivity extends Activity ...
    
    ... = getFragmentManager();
    
    .... YourFragment extends Fragment ... <-- same in both approaches

    Quindi, se si dispone di un progetto che è stato scritto utilizzando un approccio di cui sopra, e si sta integrando nel codice da altrove, essere sicuri di guardare per queste linee, e li cambia in base a ciò che hai.

    OriginaleL’autore ToolmakerSteve

  4. 2

    È semplice.

    Se anche voi volete la vostra applicazione per l’esecuzione in dispositivi più vecchi (di seguito API di livello 11), uso getSupportFragmentManager().

    Se si desidera che la vostra app per l’esecuzione in dispositivi con API di Livello superiore a 11, quindi utilizzare
    getFragmentManger().

    OriginaleL’autore suresh yadam

Lascia un commento