2012-08-02 17 views
6

Come creare un ListFragment (della libreria di supporto v4) layout da xml? ListFragment imposta il suo layout a livello di codice, quindi se si desidera modificarlo, è necessario modificare la vista Aggiungi/Rimuovi.ListFragment Layout da xml

+0

Si prega di modificare questo in modo che sia chiaro quale fosse il problema (post-it come una domanda) e mettere la soluzione di seguito nella sezione risposte . –

+0

hai un esempio da riferire? – sherpya

+0

Il post dovrebbe essere solo sotto forma di domanda e risposta. Questa sembra una soluzione, ma non è chiaro quale sia la domanda originale che risponde. –

risposta

14

Ho convertito il layout creato in xml, è possibile aggiungere/rimuovere i widget o, ad es. aggiungi soluzioni pulltorefresh. Non dovresti cambiare gli ID necessari. A causa degli ID interni necessari per alcuni widget, è necessario chiamare una funzione di supporto e deve essere in supporto nello spazio dei nomi v4 poiché le costanti sono interne con visibilità predefinita.

list_loader.xml

<?xml version="1.0" encoding="utf-8"?> 
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" > 

    <LinearLayout 
     android:id="@+id/progress_container_id" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:gravity="center" 
     android:orientation="vertical" 
     android:visibility="gone" > 

     <ProgressBar 
      style="?android:attr/progressBarStyleLarge" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" /> 
    </LinearLayout> 

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

     <TextView 
      android:id="@+id/empty_id" 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" 
      android:gravity="center" /> 

     <ListView 
      android:id="@android:id/list" 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" 
      android:drawSelectorOnTop="false" > 
     </ListView> 
    </FrameLayout> 
</FrameLayout> 

e la classe ListFragmentLayout in android.support.v4.app (nel progetto, non è necessario modificare barattolo supporto v4)

package android.support.v4.app; 

import your.package.R; 
import android.view.View; 

public class ListFragmentLayout 
{ 
    public static void setupIds(View view) 
    { 
     view.findViewById(R.id.empty_id).setId(ListFragment.INTERNAL_EMPTY_ID); 
     view.findViewById(R.id.progress_container_id).setId(ListFragment.INTERNAL_PROGRESS_CONTAINER_ID); 
     view.findViewById(R.id.list_container_id).setId(ListFragment.INTERNAL_LIST_CONTAINER_ID); 
    } 
} 

nel frammento che si estende ListFragment

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) 
{ 
    View view = inflater.inflate(R.layout.list_loader, container, false); 
    ListFragmentLayout.setupIds(view); 
    return view; 
} 
+0

vuoi dire con queste modifiche funzionerà come se non fosse una visualizzazione personalizzata? – seb

+0

sei un uomo fantastico! – seb

+0

Non funziona per me. Sembra che sto usando una versione precedente della lib di supporto. Non contiene nemmeno la classe ListFragmentLayout. Non suggerisco di usare questo approccio. Nelle future revisioni di supporto lib potrebbe non funzionare. – WindRider

-2

Dal androi d sdk (ListFragment) (http://developer.android.com/reference/android/app/ListFragment.html):

pubblica View onCreateView (gonfiatore LayoutInflater, contenitore ViewGroup, Fascio savedInstanceState)

Fornire implementazione predefinita per restituire un semplice elenco. Le sottoclassi possono eseguire l'override per sostituire con il proprio layout. In tal caso, la gerarchia della vista restituita deve avere un oggetto ListView il cui id è android.R.id.list e può facoltativamente avere un ID vista fratello android.R.id.empty che deve essere visualizzato quando l'elenco è vuoto.

Se si sostituisce questo metodo con il proprio contenuto personalizzato, prendere in considerazione l'inclusione del contenuto elenco_sale standard nel file di layout, in modo da continuare a mantenere tutto il comportamento standard di ListFragment. In particolare, questo è attualmente l'unico modo per mostrare lo stato di avanzamento indeterminato incorporato.

Così quando si desidera il proprio layout.xml per un FragmentList oltre a CriveView e gonfiare il proprio layout.

Ad esempio:

creare un layout di Android (yourlistlayout.xml) e mettere il seguente codice XML sulla posizione in cui si desidera mostrare il vostro ListFragment.

<ListView 
    android:id="@android:id/list" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:layout_alignParentLeft="true" 
    android:layout_alignParentTop="true" > 
    </ListView> 

nel vostro ListFragment classe ha messo il seguente codice:

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
     Bundle savedInstanceState) { 
    View v = inflater.inflate(R.layout.yourlistlayout, null);  
    return v;  
} 
+0

questo non funzionerebbe con la libreria di supporto poiché gli ID sono diversi – sherpya

Problemi correlati