태그 보관물: android-fragments

android-fragments

프래그먼트의 findViewById 작성하려고합니다. 그러나 findViewById메소드는 Activity 클래스를

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);