2012-09-21 17 views
23

Czy istnieje sposób na znalezienie widoku po id w zakresie fragmentu? Używam serii fragmentów do renderowania wyspecjalizowanej listy. Fragmenty są ładowane z układu, więc ich widżety mają te same identyfikatory.findViewById w ramach fragmentu

Przypuszczam, że mogę wymyślić sposób nadania każdemu widgetowi niestandardowego identyfikatora podczas tworzenia (lub zaraz po). Byłoby jednak o wiele ładniej, gdybym w jakiś sposób ograniczył findViewById do zakresu fragmentu.

+3

Dodaj swój kod, będzie o wiele łatwiej odpowiedzieć. – tolgap

+0

Możliwy duplikat [findViewById w Fragment] (http://stackoverflow.com/questions/6495898/findviewbyid-in-fragment) – Sufian

Odpowiedz

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, upewnij się, że zauważyłeś, że widok musi być zawyżony. Tak więc, nazwałbym inflater.inflate (v, container). To, albo możesz zrobić pierwszą sugestię MCeleya, ale upewnij się, że robi się to w onActivityCreated, więc widok został zawyżony i takie. W przeciwnym razie, jeśli zrobisz to w onCreateView bez zawyżonego widoku, dostaniesz zerowy wskaźnik. – dennisdrew

+1

Przepraszamy! Całkowicie tęskniłem za tym, ponieważ właśnie wyciągnąłem z jakiegoś kodu, który miałem i nadmuch był w super moim złym –

+0

Nie widzę żadnego odniesienia do zmiennej 'v' innej niż w instrukcji return. Czy to jest literówka, a jeśli tak, to jaka powinna być zmienna? – Spinner

1

Tak, jest sposób, można go znaleźć poprzez rootView. Najpierw znajdź rootView swojego fragmentu rootView=getView(); a następnie użyć rootView.findViewById(...);

6

Można to zrobić przez getView().findViewById()

22

Z wnętrza Fragment:

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

z działalności okalającego:

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

lub

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

Czasami getView() ma wartość zerową, więc co byś zrobił? – StackOverflowed

+3

'getView()' ma wartość zerową przed wywołaniem 'onCreateView()' przez fragment. W tym momencie nie ma widoku do znalezienia przy użyciu 'findViewById()', ponieważ nie utworzono żadnego widoku. – MCeley

+0

@McCeley Jeśli funkcja getView() zostanie wywołana po odłączeniu Fragmentu, zwraca również wartość null? Jestem tylko ciekawy, kiedy wywołanie funkcji getView() fragmentu zwraca wartość null. – 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); 
    } 
Powiązane problemy