2012-05-19 15 views
14

Estoy portando mi aplicación de AsyncTasks a Fragements.ListFragment cómo obtener el listView?

Pero, ¿cómo puedo acceder al elemento listView (id: list) dentro de mi fragmento?

class MyFragment extends ListFragment { 
    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
     View v = inflater.inflate(R.layout.list_fragment, container, false); 
     ListView listView = getListView(); //EX: 
     listView.setTextFilterEnabled(true); 
     registerForContextMenu(listView); 
     return v; 
    } 
} 

xml:

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

Ex:

Caused by: java.lang.IllegalStateException: Content view not yet created 
+0

http://stackoverflow.com/questions/9286391/android-why-is-this-telling-me-content-view-not-yet-created –

Respuesta

26

como el onCreateView doc permanece:

creates and returns the view hierarchy associated with the fragment 

cuanto que el método no devuelve, se le no están capaz de acceder al ListView hasta getListView(). Puede obtener una referencia válida en la devolución de llamada onActivityCreated. O puede probar usando v.findViewById(android.R.id.list) si el ListView se declara dentro list_fragment.xml

+1

utilizo onActivityCreate y obtener el contentView no creado bloqueo, incluso con el uso de un método postrasimido con espera de 100 milisegundos – CQM

6

lista Obtener vista desde el punto de vista, que son cada vez más temprano.

View view = inflater.inflate(android.R.layout.list_content, null); 
    ListView ls = (ListView) view.findViewById(android.R.id.list); 
    // do whatever you want to with list. 
3

Pude acceder al ListView con el método OnViewCreated.

+3

Esta parece ser la solución más adecuada para mí. De acuerdo con the docs ... se llama a 'onViewCreated' inmediatamente después de que onCreateView (LayoutInflater, ViewGroup, Bundle) haya regresado, pero antes de que se haya restaurado cualquier estado guardado en la vista. Esto les da a las subclases la oportunidad de inicializarse una vez que saben que su jerarquía de vistas ha sido completamente creada. Sin embargo, la jerarquía de vistas del fragmento no está asociada a su elemento principal en este punto. –

4

La solución más fácil y más confiable para este problema será anular onActivityCreated(); y haz las manipulaciones de tu lista allí.

@Override 
public void onActivityCreated(Bundle savedInstanceState) { 
    ListView listView = getListView(); //EX: 
    listView.setTextFilterEnabled(true); 
    registerForContextMenu(listView); 
    super.onActivityCreated(savedInstanceState); 
} 
1
ListFragment listFrag = new ListFragment(){ 
     @Override 
     public void onViewCreated(View view, Bundle savedInstanceState) { 
      super.onViewCreated(view, savedInstanceState); 
      ListView list = getListView(); 
      // DO THINGS WITH LIST 
     } 
    }; 
Cuestiones relacionadas