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
risposta
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;
}
vuoi dire con queste modifiche funzionerà come se non fosse una visualizzazione personalizzata? – seb
sei un uomo fantastico! – seb
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
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;
}
questo non funzionerebbe con la libreria di supporto poiché gli ID sono diversi – sherpya
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 . –
hai un esempio da riferire? – sherpya
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. –