programing

조각에서 ID별 보기 찾기

newstyles 2023. 6. 3. 08:19

조각에서 ID별 보기 찾기

조각에 대해 XML에서 만든 ImageView 요소를 참조하는 ImageView를 조각에 작성하려고 합니다. 하만지그, 그.findViewById메서드는 활동 클래스를 확장할 때만 작동합니다.프래그먼트에서도 사용할 수 있는 방법이 있습니까?

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방법.조각에 대한 루트 뷰(메소드로 반환된 뷰)를 반환합니다.이것으로 당신은 전화할 수 있습니다.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()당신은 그것을 파편의 내부나 방법으로 사용할 수 없습니다.

프래그먼트의 뷰를 부풀리고 호출해야 합니다.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;
}

에 안에.FragmentViewCreated() 재정의 메서드에서 항상 뷰를 초기화해야 하는 클래스입니다. 이 메서드에서는 다음과 같은 뷰를 찾을 수 있는 뷰 개체를 얻습니다.

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

에는 항상 하세요.onViewCreated() 또는 null을 .super.onCreateView()onCreateView()방법.다음과 같은 경우 기본적으로 호출됩니다.ListFragment~하듯이ListFragmentFrameLayout결석으로

내 서든 fragment view를 수 .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;
}

수업시간에 우리는 받습니다.onViewCreated()오버라이드 메소드는 항상 뷰를 초기화해야 합니다. 이 메소드에서는 객체를 얻을 수 있기 때문입니다.이 개체를 사용하면 아래와 같은 보기를 찾을 수 있습니다.

class MyFragment extends Fragment {
    private ImageView imageView;

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        return inflater.inflate(R.layout.my_fragment_layout, container, false);
    }

    @Override
    public void onViewCreated(View view, Bundle savedInstanceState) {
        super.onViewCreated(view, savedInstanceState);

        //initialize your view here for use view.findViewById("your view id")
        imageView = (ImageView) view.findViewById(R.id.my_image);
    }
}

▁do▁in▁에서 할 수도 있습니다.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); 

모든 뷰가 부풀려진 직후 호출되는 ViewCreated()를 재정의할 수 있습니다.View변수다음은 예입니다.

class GalleryFragment extends Fragment {
    private Gallery gallery;

    (...)

    @Override
    public void onViewCreated(View view, Bundle savedInstanceState) {
        gallery = (Gallery) view.findViewById(R.id.gallery);
        gallery.setAdapter(adapter);
        super.onViewCreated(view, savedInstanceState);
    }
}

getView() 메서드는 OnCreate 및 유사한 메서드 외부의 fragment에서 작동하지 않습니다.

두 가지 방법으로, 보기를 oncreate(보기가 생성될 때만 기능을 실행할 수 있음)의 함수로 전달하거나 보기를 변수로 설정합니다.

private View rootView;

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
    Bundle savedInstanceState) {
    rootView = inflater.inflate(R.layout.fragment_contatos, container, false);
}

public void doSomething () {
    ImageView thumbnail = (ImageView) rootView.findViewById(R.id.someId);
}

fragment 레이아웃을 먼저 부풀린 다음 ID로 findview를 사용할 수 있습니다.

View view = inflater.inflate(R.layout.testclassfragment, container, false);
             ImageView imageView = (ImageView) view.findViewById(R.id.my_image);
             return view;
EditText name = (EditText) getView().findViewById(R.id.editText1);
EditText add = (EditText) getView().findViewById(R.id.editText2);  

부르는 것에 동의한findViewById()전망이 좋은

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

참고:

API Level 26부터는 findViewById가 반환 유형에 대해 추론을 사용하므로 결과를 구체적으로 캐스트할 필요가 없습니다.

이제 간단하게 할 수 있습니다.

public View onCreateView(LayoutInflater inflater, 
                         ViewGroup container, 
                         Bundle savedInstanceState) {
     View view = inflater.inflate(R.layout.testclassfragment, container, false);
     ImageView imageView =  view.findViewById(R.id.my_image); //without casting the return type
     return view;
}

사용하다

imagebutton = (ImageButton) getActivity().findViewById(R.id.imagebutton1);

imageview = (ImageView) getActivity().findViewById(R.id.imageview1);

그건 작동할 것이다.

API 레벨 11에 대한 문서에 따르면

Back Stack http://developer.android.com/reference/android/app/Fragment.html 에서 참조

단축 코드

/**
 * The Fragment's UI is just a simple text view showing its
 * instance number.
 */
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {
    View v = inflater.inflate(R.layout.hello_world, container, false);
    View tv = v.findViewById(R.id.text);
    ((TextView)tv).setText("Fragment #" + mNum);
    tv.setBackgroundDrawable(getResources().getDrawable(android.R.drawable.gallery_thumb));
    return v;
}

사용.getView()조각의 보기를 반환하면 호출할 수 있습니다.findViewById()조각 보기의 모든 보기 요소에 액세스합니다.

이것을 사용해 보세요. 저에게 효과가 있습니다.

public class TestClass extends Fragment {
    private ImageView imageView;

    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.testclassfragment, container, false);
        findViews(view);
        return view;
    }

    private void findViews(View view) {
        imageView = (ImageView) view.findViewById(R.id.my_image);
    }
}

레이아웃 파일을 선언합니다.

public View onCreateView(LayoutInflater inflater,ViewGroup container, 
                                 Bundle savedInstanceState) {
    return inflate(R.layout.myfragment, container, false);
}

그런 다음, 보기의 ID를 가져옵니다.

@Override
public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
    super.onViewCreated(view, savedInstanceState);
    TextView nameView = (TextView) view.findViewById(R.id.textview1);
}
ImageView imageView;
public View onCreateView(LayoutInflater inflater, 
                     ViewGroup container, 
                     Bundle savedInstanceState) {
 View view = inflater.inflate(R.layout.testclassfragment, container, false);
 imageView = view.findViewById(R.id.my_image);
 return view;

}

이를 구현하는 가장 좋은 방법은 다음과 같습니다.

public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {

rootView = inflater.inflate(R.layout.testclassfragment, container, false);
        ImageView imageView = (ImageView) rootView.findViewById(R.id.my_image);
        return rootView
}

이러한 방식으로 xml 레이아웃에 정의된 각 컨트롤에 대해 rootView를 사용할 수 있으며 코드가 훨씬 깨끗해집니다.

이것이 도움이 되길 바랍니다 :)

사용:

View v = inflater.inflate(R.layout.testclassfragment, container, false);
ImageView img = (ImageView) v.findViewById(R.id.my_image);

return v;

해라

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

그래들 골격 플러그인을 사용하면 레이아웃을 참조하여 뷰 홀더 클래스를 자동으로 생성합니다.

public class TestClass extends Fragment {
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        MyLayout myLayout = new MyLayout(inflater, container, false);
        myLayout.myImage.setImageResource(R.drawable.myImage);
        return myLayout.view;
    }
}

이제 당신이 가지고 있었다고 가정할 때ImageView당신에게 선언된my_layout.xml파일, 자동으로 myLayout 클래스를 생성합니다.

저는 모든 것이 구조화되는 것을 좋아합니다.이런 식으로 하시면 됩니다.

첫 번째 초기화 보기

private ImageView imageView;

그런 다음 OnViewCreated를 재정의합니다.

@Override
    public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
        super.onViewCreated(view, savedInstanceState);
        findViews(view);
    }

그런 다음 뷰를 찾기 위해 빈 방법을 추가합니다.

private void findViews(View v) {
    imageView = v.findViewById(R.id.img);
}
//here you can do it by
   public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState)
  {
    // Inflate the layout for this fragment
    final View view =  inflater.inflate(R.layout.fragment_apple, container, 
 false);
    ist = view.findViewById(R.id.linearLink);
    second = view.findViewById(R.id.linearPhone);
    return view;

전화할 수 있습니다.findViewById()사용자의 내부에 있는 활동 개체와 함께 사용합니다.public void onAttach(Activity activity)메소드를 사용할 수 있습니다.

활동을 다음과 같은 변수에 저장합니다.

Fragment 클래스에서:private Activity mainActivity;onAttach() 방법:this.mainActivity=activity;

를 vairable: findViewById를 합니다.mainActivity.findViewById(R.id.TextView);

Inside on CreateView 메서드

먼저 추가할 레이아웃/뷰를 부풀려야 합니다.선형 레이아웃

LinearLayout ll = inflater.inflate(R.layout.testclassfragment, container, false);

그러면 레이아웃에서 imageView ID를 찾을 수 있습니다.

ImageView imageView = (ImageView)ll.findViewById(R.id.my_image);

부풀린 레이아웃을 반환합니다.

return ll;

뷰를 부풀려야 합니다.

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
}}

ViewCreated에서 호출되는 메서드가 하나 더 있습니다.

@Override
public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
    super.onViewCreated(view, savedInstanceState);
    ImageView imageView = (ImageView) view.findViewById(R.id.imageview1);
}

언급URL : https://stackoverflow.com/questions/6495898/findviewbyid-in-fragment