2012-09-21 15 views
23

¿Hay alguna forma de encontrar una vista por ID dentro del alcance de un fragmento? Estoy usando una serie de fragmentos para hacer una lista especializada. Los fragmentos se cargan desde un diseño, por lo que todos sus widgets tienen los mismos identificadores.findViewById dentro del fragmento

Supongo que puedo encontrar la manera de darle a cada widget una identificación personalizada durante (o justo después) de la creación. Sin embargo, sería mucho mejor si pudiera limitar el findViewById al alcance del fragmento.

+3

Agregue su código, será mucho más fácil de responder. – tolgap

+0

Posible duplicado de [findViewById en Fragment] (http://stackoverflow.com/questions/6495898/findviewbyid-in-fragment) – Sufian

Respuesta

56
private View myFragmentView; 

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) 
{ 
    myFragmentView = inflater.inflate(R.layout.myLayoutId, container, false); 
    myView = myFragmentView.findViewById(R.id.myIdTag) 

    return myFragmentView; 
} 
+0

MrFox, asegúrese de tener en cuenta que la vista debe estar inflada. Entonces, yo llamaría a inflater.inflate (v, contenedor). Eso, o podrías hacer la primera sugerencia de MCeley, pero asegúrate de que esto se haga en el modo de actividad creado para que la vista se haya inflado y tal. De lo contrario, si lo hace en onCreateView sin vista inflada, obtendrá un puntero nulo. – dennisdrew

+1

¡Lo siento! Eché de menos que, dado que saqué de algún código que tenía arriba y el inflado estaba en el super malo –

+0

, no puedo ver ninguna referencia a la variable 'v' que no sea la declaración de devolución. ¿Es esto un error tipográfico? De ser así, ¿qué variable debería ser? – Spinner

1

Sí, hay una manera, puede encontrarlo a través de rootView. En primer lugar encontramos la rootView de su fragmento rootView=getView(); y luego usar rootView.findViewById(...);

6

Puede hacerlo por getView().findViewById()

22

Desde el interior del Fragmento:

getView().findViewById(R.id.your_view); 

de la actividad que encierra:

getFragmentManager().findFragmentByTag("YourFragmentTag").getView().findViewById(R.id.your_view); 

o

getFragmentManager().findFragmentById(R.id.your_fragment).getView().findViewById(R.id.your_view); 
+2

Algunas veces getView() es nulo, entonces ¿qué harías? – StackOverflowed

+3

'getView()' solo es nulo antes de que 'onCreateView()' sea llamado por el fragmento. En ese punto, no hay vista que se encuentre usando 'findViewById()' porque no se ha creado ninguna vista. – MCeley

+0

@McCeley Si se llama a getView() después de separar el Fragmento, ¿también devuelve nulo? Solo tengo curiosidad por saber cuándo la llamada getView() de un Fragmento devuelve nulo. – StackOverflowed

0
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
          Bundle savedInstanceState) { 
     View rootview=null; 

      rootview=inflater.inflate(R.layout.fragment_web_view, container, false); 
      ListView lv = (ListView)rootview.findViewById(android.R.id.list); 

return rootview; 
     // Inflate the layout for this fragment 
     //return inflater.inflate(R.layout.fragment_web_view, container, false); 
    } 
Cuestiones relacionadas