Pregunta

Estoy aprendiendo el desarrollo de Android. Me atasco en algo que debería ser muy fácil.

IM Creación de una aplicación con una actividad, 2 fragmentos y 1 interfaz.

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

Por lo tanto, en la actividad principal, estoy tratando de crear una referencia al fragmento B usando el administrador. Me atascan aquí, porque Eclispse me está diciendo que cambie algunas cosas (ver más abajo):

Mi intensión: `

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

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

}`

Si lo hago, esto, obtengo los mensajes de error y necesito realizar algunos cambios. Después de los cambios, el código se ve así (y todavía no puedo llegar a 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);

}

Para detalles adicionales, diré aquí también el encabezado de importación de la actividad:

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

¿Qué estoy perdiendo aquí? Todo el soporte.v4 /support.v7 cosa es un poco confusa para los novatos.

Editar: Después de cambiar a:

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

y extender la fragmentación. Todavía no puedo crear una referencia a FRAGMENTB:

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

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

}

Según lo solicitado, he publicado el código FRAGMENTB:

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

XML principal

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

¿Fue útil?

Solución

En primer lugar: su actividad debe extender la fragmentación.

sobre las bibliotecas de soporte.Se introdujeron para agregar algunas funcionalidades a los Androids mayores.Por ejemplo, se introdujeron fragmentos en Android 3.0 (SDK NR: 11).De hecho (según la documentación) en Androids 3.0

Otros consejos

Simplemente use GetSupPortfragmentManager ();, después de que haya agregado la biblioteca de soporte con éxito.

OP estaba tan cerca de tener una solución que hubiera funcionado bien para API 11 y más nuevo sin necesidad de soporte.v4 .

Solo necesitaba cambiar su fragmento para no usar soporte.v4, en su declaración strong>.

Resumen de los dos enfoques. Todas sus actividades y fragmentos deben tener un código que parece exactamente uno de estos;¡No los mezcles!(No se necesitan todas las líneas en todos los archivos; use líneas según sea necesario).

support-v4 Enfoque

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+ Enfoque

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

... MainActivity extends Activity ...

... = getFragmentManager();

.... YourFragment extends Fragment ... <-- same in both approaches


Entonces, si tiene un proyecto que está escrito con un enfoque anterior, y está integrando en el código de otra parte, asegúrese de buscar estas líneas y cambiarlas para que coincidan con lo que tiene.

es simple.

Si también desea que su aplicación se ejecute en dispositivos más antiguos (por debajo del nivel API 11), use getSupportFragmentManager().

Si desea que su aplicación se ejecute en dispositivos con nivel de API por encima de 11, entonces use getFragmentManger().

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top