Android 片段中的findViewById
我试图在片段中创建一个ImageView,该片段将引用我在XML中为片段创建的ImageView元素。但是,Android 片段中的findViewById,android,android-fragments,android-imageview,findviewbyid,Android,Android Fragments,Android Imageview,Findviewbyid,我试图在片段中创建一个ImageView,该片段将引用我在XML中为片段创建的ImageView元素。但是,findViewById方法仅在扩展活动类时有效。还有什么我可以在片段中使用的吗 public class TestClass extends Fragment { public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { I
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
方法有一个错误,表明该方法未定义。使用或执行onViewCreated
方法中的View参数。它返回片段的根视图(由onCreateView()
方法返回的根视图)。有了它,您可以调用findviewbyd()
由于getView()
仅在onCreateView()
之后工作,因此不能在片段的onCreate()
或onCreateView()方法中使用它。使用或实现onViewCreated
方法中的View参数。它返回片段的根视图(由onCreateView()
方法返回的根视图)。有了它,您可以调用findviewbyd()
由于getView()
只能在onCreateView()
之后工作,因此不能在片段的onCreate()
或onCreateView()
方法中使用它。需要膨胀片段的视图,并在它返回的视图上调用findViewById()
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;
}
您需要膨胀片段的视图,并在它返回的视图上调用findViewById()
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;
}
首先获取片段视图,然后从该视图获取您的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;
}
首先获取片段视图,然后从该视图获取您的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 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);
}
}
您可以覆盖onViewCreated(),该函数在所有视图膨胀后立即调用。这是填写片段的成员视图变量的正确位置。下面是一个例子:
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);
}
}
我意识到这是一个老生常谈的问题,但普遍的答案令人不满意
问题不清楚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
需要什么-我们是将其作为视图传递回去,还是仅仅保存一个引用供以后使用
无论哪种方式,如果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;
}
}
同意在视图上调用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;
}
同意在视图上调用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;
}
使用getView()
返回片段的视图,然后可以调用findViewById()
来访问片段视图中的任何视图元素。使用getView()
返回片段的视图,然后可以调用findViewById()
访问片段视图中的任何视图元素。您也可以在onActivityCreated
方法中执行此操作
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
}
就像这里一样:(在API级别28中不推荐)
及
都是可能的。您也可以在创建的onActivityCreated
方法中执行此操作
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
}
就像这里一样:(在API级别28中不推荐)
及
是可能的。在Fragment
类中,您将获得override方法,在该方法中,您应该始终初始化视图,因为在此方法中,您可以获得视图对象,您可以使用该对象查找视图,如:
@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);
}
请始终记住,在出现片段时,如果从onCreateView()
方法返回null或super.onCreateView()
,则不会自动调用onViewCreated()
方法。
默认情况下,如果ListFragment
作为ListFragment
返回FrameLayout
,则会调用它
注意:成功执行onCreateView()
后,可以使用getView()
在类中的任何位置获取片段视图。
i、 e
在Fragment
类中,您将获得override方法,在该方法中,您应该始终初始化视图,因为在该方法中,您可以获得视图对象,使用该对象可以找到您的视图,如:
@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);
}
请始终记住,在出现片段时,如果从onCreateView()
方法返回null或super.onCreateView()
,则不会自动调用onViewCreated()
方法。
默认情况下,如果ListFragment
作为ListFragment
返回FrameLayout
,则会调用它
注意:成功执行onCreateView()
后,可以使用getView()
在类中的任何位置获取片段视图。
i、 e
getView()方法不适用于OnCreate和类似方法之外的片段
有两种方法,将视图传递给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);
}
getView()方法不适用于OnCreate和类似方法之外的片段
有两种方法,将视图传递给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);
}
您可以使用Activity对象调用findViewById()
,进入片段中的public void-onAttach(Activity-Activity)
方法
将活动保存到变量中,例如:
在片段类中:
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;
}
}
imagebutton = (ImageButton) getActivity().findViewById(R.id.imagebutton1);
imageview = (ImageView) getActivity().findViewById(R.id.imageview1);
LinearLayout ll = inflater.inflate(R.layout.testclassfragment, container, false);
ImageView imageView = (ImageView)ll.findViewById(R.id.my_image);
return ll;
@Override
public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
ImageView imageView = (ImageView) view.findViewById(R.id.imageview1);
}
public View onCreateView(LayoutInflater inflater,ViewGroup container,
Bundle savedInstanceState) {
return inflate(R.layout.myfragment, container, false);
}
@Override
public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
TextView nameView = (TextView) view.findViewById(R.id.textview1);
}
View v = inflater.inflate(R.layout.testclassfragment, container, false);
ImageView img = (ImageView) v.findViewById(R.id.my_image);
return v;
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
}}
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 {
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);
}
}
class Demo extends Fragment
{
@Override
public View onCreateView(final LayoutInflater inflater,ViewGroup container, Bundle savedInstanceState)
{
View view =inflater.inflate(R.layout.demo_fragment, container,false);
ImageView imageview=(ImageView)view.findViewById(R.id.imageview1);
return view;
}
}
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;
}
}
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;
}
View view = inflater.inflate(R.layout.testclassfragment, container, false);
ImageView imageView = (ImageView) view.findViewById(R.id.my_image);
return view;
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);
}
}
private ImageView imageView;
@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);
}