17

Sto tentando di personalizzare il layout del frammento restituendo la mia gerarchia di viste da onCreateView(LayoutInflater, ViewGroup, Bundle). Questo gonfia la mia vista personalizzata, ma sembra impilare le visualizzazioni anziché gonfiare all'interno, vedo tutto in una volta. Qualsiasi aiuto è apprezzato.Android + ListFragment con una gerarchia di viste personalizzata

MyActivity.java:

public class MyActivity extends FragmentActivity{ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     if (getSupportFragmentManager().findFragmentById(android.R.id.content) == null) { 
      ArrayListFragment list = new ArrayListFragment(); 
      getSupportFragmentManager().beginTransaction().add(android.R.id.content, list).commit(); 
     } 
    } 

    public static class ArrayListFragment extends ListFragment { 

     @Override 
     public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
      inflater.getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
      inflater.inflate(R.layout.main, container); 
      return super.onCreateView(inflater, container, savedInstanceState); 
     } 

     @Override 
     public void onActivityCreated(Bundle savedInstanceState) { 
      super.onActivityCreated(savedInstanceState); 
      String List[] = {"Larry", "Moe", "Curly"}; 
      setListAdapter(new ArrayAdapter<String>(getActivity(), android.R.layout.simple_list_item_1, List)); 
     } 
    } 
} 

main.xml

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:paddingLeft="8dp" 
    android:paddingRight="8dp"> 

    <Button 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:text="THIS IS A BUTTON" /> 

    <ListView 
    android:id="@android:id/list" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:background="#00FF00" 
    android:layout_weight="1" 
    android:drawSelectorOnTop="false" /> 

    <TextView 
    android:id="@android:id/empty" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:background="#FF0000" 
    android:text="No data" /> 
</LinearLayout> 
+0

Inoltre da notare, sto usando Android-supporto-v4. Dalla documentazione Android, afferma chiaramente: "ListFragment ha un layout di default che si compone di un unico elenco vista Tuttavia, se si desidera, è possibile personalizzare il layout frammento da restituendo la propria gerarchia di vista da onCreateView (. LayoutInflater, ViewGroup, Bundle). Per fare ciò, la gerarchia della vista deve contenere un oggetto ListView con l'id "@android: id/list" (o l'elenco se è nel codice ). " – worked

risposta

33

non stavo tornando la nuova vista all'interno del metodo onCreateView della classe ListFragment. Ad esempio:

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

Tutto funziona bene ora nella terra di Android!

+4

La riga del primo in 'onCreateView' non è necessaria (in realtà non sta facendo nulla ...) Il gonfiatore è già passato (che usi). – ashughes

+1

Buon punto ... aggiornato. – worked

+0

Potresti fornire maggiori dettagli? –

1
getSupportFragmentManager().beginTransaction().add(android.R.id.content, list).commit(); 

L'elenco non è accettato, è in cerca di un frammento.

2

Credo che faresti meglio

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
View root = inflater.inflate(R.layout.main, container, false); 
return root; 
} 
0

uso questo schema, funziona perfettamente!

inflater.inflate(R.layout.list_layout, container, false); 

pubblica View gonfiare (XmlPullParser parser, radice ViewGroup, attachToRoot booleano)

attachToRoot Sia la gerarchia gonfiato deve essere collegato al parametro root? Se false, root viene utilizzato solo per creare la sottoclasse corretta di LayoutParams per la visualizzazione radice nell'XML.

2

modo ottimizzato e codice girato

@Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
     return inflater.inflate(R.layout.list_alphabet, container, false); 
    }