2012-09-21 5 views
23

조각의 범위 내에서 ID별로보기를 찾을 수있는 방법이 있습니까? 특수 목록을 렌더링하기 위해 일련의 조각을 사용하고 있습니다. 파편은 레이아웃에서로드되므로 위젯의 ID는 모두 동일합니다.조각 내에서 findViewById

각 위젯에 생성하는 동안 (또는 생성 직후) 맞춤 ID를 제공하는 방법을 알아낼 수 있다고 가정합니다. 그러나 findViewById를 어떻게 든 조각의 범위로 제한 할 수 있다면 훨씬 더 좋을 것입니다.

+3

코드를 추가하면 대답하기가 훨씬 쉬울 것입니다. – tolgap

+0

[findViewById in Fragment]의 가능한 복제본 (http://stackoverflow.com/questions/6495898/findviewbyid-in-fragment) – Sufian

답변

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를 볼 수 있습니다. 뷰를 팽창시켜야합니다. 그래서 나는 inflater.inflate (v, container)를 호출 할 것입니다. 즉, MCeley의 첫 번째 제안을 할 수는 있지만 onActivityCreated에서이 작업이 완료되었는지 확인하여 뷰가 비정상적으로 종료되었는지 확인하십시오. 그렇지 않으면 뷰를 부 풀리지 않고 onCreateView에서 수행하면 널 포인터가 생성됩니다. – dennisdrew

+1

죄송합니다! 나는 그저 내가 가지고 있던 코드를 뽑아 내 팽창이 너무 심해서 그걸 놓쳤다. –

+0

return 문 이외의 변수'v'에 대한 참조를 볼 수 없다. 이것은 오타입니까? 그렇다면 어떤 변수가 있어야합니까? – Spinner

1

예, 방법이 있습니다. rootView를 통해 찾을 수 있습니다. 먼저 당신의 조각 rootView=getView();의 rootView을 찾은 다음 당신은 조각 내부에서 getView().findViewById()

6

를 사용

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

: 바깥 쪽 활동에서

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

또는

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

에 의해 그것을 할 수 rootView.findViewById(...);

+2

때때로 getView()가 null이므로 어떤 작업을 수행합니까? – StackOverflowed

+3

'onCreateView()'가 프래그먼트에 의해 호출되기 전에'getView()'만이 null입니다. 이 시점에서 뷰가 생성되지 않았기 때문에'findViewById()'를 사용하여 찾을 뷰가 없다. – MCeley

+0

@McCeley 조각이 분리 된 후에 getView()가 호출되면 null도 반환합니까? Fragment의 getView() 호출이 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); 
    }