조각에서 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;
}
에 안에.Fragment
ViewCreated() 재정의 메서드에서 항상 뷰를 초기화해야 하는 클래스입니다. 이 메서드에서는 다음과 같은 뷰를 찾을 수 있는 뷰 개체를 얻습니다.
@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
~하듯이ListFragment
FrameLayout
결석으로
내 서든 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
'programing' 카테고리의 다른 글
"+" (+ 기호) CSS 선택기는 무엇을 의미합니까? (0) | 2023.06.03 |
---|---|
루비에서 파일에 쓰는 방법은? (0) | 2023.06.03 |
뷰의 절대 좌표를 가져오는 방법 (0) | 2023.06.03 |
Android Studio:jar를 라이브러리로 추가하시겠습니까? (0) | 2023.06.03 |
구성 요소는 2개 모듈 선언의 일부입니다. (0) | 2023.06.03 |