android.support.v4.app.fragmentmanager o android.app.fragmentmanager?
-
21-12-2019 - |
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>
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()
.