Fragment에서 XML로 작성한 ImageView 요소를 참조하는 Fragment에서 ImageView를 작성하려고합니다. 그러나 findViewById
메소드는 Activity 클래스를 확장하는 경우에만 작동합니다. 어쨌든 Fragment에서도 사용할 수 있습니까?
public class TestClass extends Fragment {
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
ImageView imageView = (ImageView)findViewById(R.id.my_image);
return inflater.inflate(R.layout.testclassfragment, container, false);
}
}
findViewById
메소드는 메소드가 정의되는 것을 말한다 그것에 에러를 갖는다.
답변
메소드 구현시 getView () 또는 View 매개 변수를 사용하십시오 onViewCreated
. 프래그먼트의 루트 뷰 ( onCreateView()
메소드가 반환 한 루트 뷰)를 반환합니다 . 이것으로 당신은 전화 할 수 있습니다 findViewById()
.
@Override
public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
ImageView imageView = (ImageView) getView().findViewById(R.id.foo);
// or (ImageView) view.findViewById(R.id.foo);
으로 getView()
후에 만 작동 onCreateView()
, 당신은 내부를 사용할 수 없습니다 onCreate()
또는 onCreateView()
방법 조각의.
답변
당신은 조각의보기와 통화를 팽창 할 필요가 findViewById()
온 View
이 돌아갑니다.
public View onCreateView(LayoutInflater inflater,
ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.testclassfragment, container, false);
ImageView imageView = (ImageView) view.findViewById(R.id.my_image);
return view;
}
답변
Fragment
클래스 내부에서 onViewCreated () 재정의 메소드를 사용하여 뷰를 항상 초기화해야합니다.이 메소드 에서처럼 뷰를 찾을 수있는 뷰 객체를 얻습니다.
@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
view.findViewById(R.id.yourId).setOnClickListener(this);
// or
getActivity().findViewById(R.id.yourId).setOnClickListener(this);
}
Fragment의 경우 항상 onViewCreated()
null을 반환하거나 메서드 super.onCreateView()
에서 반환하면 메서드가 자동으로 호출되지 않습니다 onCreateView()
. 기본적 ListFragment
으로 ListFragment
반환 FrameLayout
되는 경우 기본적으로 호출됩니다 .
참고 : getView()
한 번 onCreateView()
성공적으로 실행 하면 클래스의 어느 곳에서나 조각보기를 얻을 수 있습니다 . 즉
getView().findViewById("your view id");
답변
나는 이것이 오래된 질문이라는 것을 알고 있지만, 일반적인 대답은 원하는 것을 남겨 둡니다.
이 질문은 무엇이 필요한지 명확하지 않습니다. imageView
다시보기로 전달하거나 나중에 참조를 저장합니까?
어느 쪽이든, ImageView
팽창 된 레이아웃에서 오는 경우 올바른 방법은 다음과 같습니다.
public class TestClass extends Fragment {
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View v = inflater.inflate(R.layout.testclassfragment, container, false);
ImageView imageView = (ImageView)v.findViewById(R.id.my_image);
return v;
}
}
답변
먼저 조각보기를 얻은 다음이보기에서 ImageView를 가져옵니다.
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.testclassfragment, container, false);
ImageView imageView = (ImageView) view.findViewById(R.id.my_image);
return view;
}
답변
onActivityCreated
방법으로 도 할 수 있습니다 .
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
}
그들이 여기있는 것처럼 : http://developer.android.com/reference/android/app/Fragment.html (API 레벨 28에서 사용되지 않음)
getView().findViewById(R.id.foo);
과
getActivity().findViewById(R.id.foo);
가능합니다.
답변
getView()
루트 뷰를 제공합니다
View v = getView().findViewByID(R.id.x);