2014-10-10 12 views
8

Diciamo che ho 2 frammenti, uno contiene una vista elenco e un altro contiene un testo di caricamento. Voglio quando faccio clic su una voce dell'elenco, il frammento del testo di caricamento viene visualizzato in cima alla visualizzazione elenco. Ho adattato l'opacità dello sfondo del testo di caricamento a: android: background = "# 33FFFFFF". Ma ancora mostra solo il testo di caricamento su uno sfondo grigio uniforme.Android: Frammento sovrapposto a un altro frammento con semi trasparente

<?xml version="1.0" encoding="utf-8"?> 
<ListView 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:id="@android:id/list" 
    android:background="#e8e9ee" 
    android:divider="#ccc" 
    android:dividerHeight="1dp"/> 

frammento che contiene un TextView:

<?xml version="1.0" encoding="utf-8"?> 
<TextView 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:gravity="center" 
    android:text="@string/loadingText" 
    android:id="@+id/loadingText" 
    android:textColor="#e8e9ee" 
    android:background="#33FFFFFF" 
    android:layout_centerVertical="true" 
    android:layout_centerHorizontal="true" /> 

Il mio codice Java è fondamentalmente qualcosa di simile: onItemClick:

FragmentTransaction transaction=manager.beginTransaction(); 
transaction.show(loadingFragment); 
transaction.commit(); 

risposta

11

l'ho fatto e funziona perfettamente, ma invece di utilizzare. mostra che ho usato .add:

Struttura attività:

<RelativeLayout 
    android:id="@+id/layout" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:layout_marginRight="5dp" 
    android:layout_marginEnd="5dp"> 

    <FrameLayout 
     android:id="@+id/list_view_container" 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent" 
     android:layout_centerVertical="true" 
     android:layout_centerHorizontal="true"> 
    </FrameLayout> 

    <FrameLayout 
     android:id="@+id/loading_text_fragment_container" 
     android:layout_width="300dp" 
     android:layout_height="300dp" 
     android:layout_centerHorizontal="true" 
     android:layout_centerVertical="true"> 
    </FrameLayout> 

</RelativeLayout> 

nell'attività:

Prima aggiungere l'elenco Vista:

ListViewFragment listViewFragment = new ListViewFragment(); 
fragmentManager.beginTransaction().add(R.id.list_view_container, listViewFragment).commit(); 

Poi il testo di carico:

// Create a new Fragment to be placed in the activity layout 
YourFragment yourFragment = new YourFragment(); 

// Add the fragment to the 'loading_text_fragment_container' FrameLayout 
fragmentManager.beginTransaction().add(R.id.loading_text_fragment_container, yourFragment).commit(); 

In YourFragment.java

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

E il tuo_fragment_layout.xml ha una TextView comune senza alcun attributo speciale.

Spero che sia utile,

saluti!

+0

Cosa c'è ListViewFragment, è da questo https://github.com/ribot/easy-adapter? – ishandutta2007

+0

in secondo luogo ottengo errore 'fragmentManager.beginTransaction() chiamata richiesta API 11 o prima', quindi si prega di fornire anche le versioni. – ishandutta2007

+0

Ciao! No, ListViewFragment è solo il nome del mio LisView (non ho il codice [2014] ma non ha un comportamento particolare. A proposito del livello API richiesto, prova ad usare la libreria di supporto. Cordiali saluti! –

1

Penso che in realtà stai sostituendo il frammento originale piuttosto che sovrapponendolo. È necessario creare due framelayouts che coprono l'intero schermo e quindi assegnare il frammento di carico al layout telaio sovrapposizione

in voi attività

<FrameLayout id="@+id/ListFragment" 
       android:layout_width="match_parent" 
       android:layout_height="match_parent" > 
</FrameLayout> 
<FrameLayout id="@+id/LoadingFragment" 
       android:layout_width="match_parent" 
       android:layout_height="match_parent" > 
</FrameLayout> 

e poi caricarli

FragmentTransaction transaction=manager.beginTransaction(); 
transaction.add(R.id.ListFragment, listFragment); 
transaction.commit(); 

FragmentTransaction transaction=manager.beginTransaction(); 
transaction.add(R.id.LoadingFragment, loadingFragment); 
transaction.commit(); 
+1

non puoi farlo usando un frame layout e basta aggiungere altri due layout contenitore alla vista con ogni reprentazione del frammento? – jonney

+1

Non proprio, il layout del frame è il migliore per aggiungere i frammenti in modo dinamico. – Kelly

Problemi correlati