El fragmento es transparente y muestra la actividad a continuación

Mi aplicación de Android se inicia en BeginActivity, que es una subclase de SherlockFragmentActivity y muestra su primera vista con:

@Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); if (getSupportFragmentManager().findFragmentById(android.R.id.content) == null) { Fragment f = LoginFragment.newInstance(); getSupportFragmentManager() .beginTransaction() .add(android.R.id.content, f, "loginfragment") .attach(f) .commit(); } } 

LoginFragment muestra una vista como esta:

 @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { super.onCreateView(inflater, container, savedInstanceState); // Inflate the layout for this fragment View v = inflater.inflate(R.layout.login, container, false); // Get pointers to text views usernameField = (EditText) v.findViewById(R.id.usernameLog); passwordField = (EditText) v.findViewById(R.id.passwordLog); progressBar = (ProgressBar) v.findViewById(R.id.progressBarLog); // Set button click listeners for both buttons Button b = (Button) v.findViewById(R.id.loginButton); b.setOnClickListener(this); return v; } 

Al hacer clic en Iniciar sesión, muestro una vista de lista como esta:

 BeginActivity top = (BeginActivity) getActivity(); Fragment f = OfferListFragment.newInstance(); top.getSupportFragmentManager() .beginTransaction() .add(android.R.id.content, f, "offerList") .addToBackStack(f.getClass().getSimpleName()) .commit(); 

Y finalmente, OfferListFragment muestra su vista como esta:

 @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { // Inflate the layout for this fragment View v = inflater.inflate(R.layout.offers, container, false); return v; } 

Ahora el problema que estoy teniendo, es que el Final OfferListFragment parece ser transparente y puedo ver la pantalla de inicio de sesión debajo de él. Estoy utilizando Theme.Sherlock que tiene un fondo negro. ¿Debo fijar manualmente los fondos de las vistas al negro también? ¿O el negro en el tema sería personalizable por el usuario en el sistema? (No soy un usuario de Android).

Gracias

Intente usar la clase FragmentTransaction para replace los fragmentos en lugar de simplemente agregar.

Explicación:

Cada transacción es un conjunto de cambios que desea realizar al mismo tiempo. Puede configurar todos los cambios que desea realizar para una transacción determinada mediante métodos como add() , remove() y replace() . A continuación, para aplicar la transacción a la actividad, debe llamar a commit() .

Antes de llamar a commit() , sin embargo, es posible que desee llamar a addToBackStack() para agregar la transacción a una pila posterior de transacciones de fragmentos. Esta pila posterior es gestionada por la actividad y permite al usuario volver al estado de fragmento anterior, presionando el botón Atrás.

Por ejemplo, aquí es cómo puede reemplazar un fragmento con otro, y preservar el estado anterior en la pila de atrás:

Ejemplo:

 // Create new fragment and transaction Fragment newFragment = new ExampleFragment(); FragmentTransaction transaction = getFragmentManager().beginTransaction(); // Replace whatever is in the fragment_container view with this fragment, // and add the transaction to the back stack transaction.replace(R.id.fragment_container, newFragment); transaction.addToBackStack(null); // Commit the transaction transaction.commit(); 

Referencia: Por favor, eche un vistazo a Managing Fragments

Espero que sea util !!

IMHO No estoy de acuerdo con esta respuesta.

Es posible que desee reemplazar su fragmento o puede que desee agregarlo.

Por ejemplo, digamos que usted está en un fragmento que es una lista recuperada por una solicitud de red, si reemplaza el fragmento con vamos a decir el detailFragment y lo agrega a backStack.

Cuando usted vuelve a su fragmento se rehacer la consulta de red, por supuesto, puede caché, pero ¿por qué? Es un regreso a un estado anterior, por lo que con añadir el último fragmento será exactamente en el mismo estado sin ningún tipo de código.

Los fragmentos son de fondo transparente de forma predeterminada, ya que pueden ser utilizados para pintar sólo una pequeña parte de la pantalla, pero si el fragmento es match_parent a continuación, sólo tiene que establecer su fondo a un color y seguir utilizando añadir a la fragmentTransaction.

 <ScrollView xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/scrollView1" android:background="@android:color/white" android:layout_width="match_parent" android:layout_height="wrap_content" > 

Ése será su elemento de la raíz en la disposición XML del fragmento, podría ser linear, etc etc y el código de la transacción es:

 YourFragment detail = YourFragment.newInstance(Id); ft.add(R.id.contentHolder, detail); ft.addToBackStack(TAG); ft.commit(); 

Espero que esto ayude a alguien que quiere saber cómo ver un fondo sólido sin cambiar el añadir a reemplazar que normalmente no es el mejor caso.

Saludos

I utiliza muchas técnicas, pero no hay ganancia Finalmente me lo arregló mediante la adición de fondo del contenedor o el diseño del fragmento como este

 android:background="@android:color/white" 

Sólo tiene que agregar en su diseño o la vista de contenedor de Fragmento Espero que ayudará

  • Cómo enviar cursor de la actividad de Android para fragmentar
  • Añadir pestaña dentro de Fragmento ¿En Android?
  • DialogFragment: NullPointerException (biblioteca de soporte)
  • Android: la pantalla del fragmento gira
  • KeyEvent.KEYCODE_BACK se llama dos veces en Fragmento
  • BadTokenException ActivityGroup para TabActivity utilizando
  • FragmentManager agrega varias instancias del mismo tipo de fragmento
  • Borrar backstack y reemplazar fragmento actual con un fragmento de nivel superior
  • La fila de RecyclerView está barajando y cambiando Imágenes: android
  • Fragmento ya agregó IllegalStateException
  • Cómo guardar el estado del fragmento teniendo listview
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.