我试图在一个片段中创建一个ImageView,它将引用我在XML中为片段创建的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方法有一个错误,说明该方法未定义。
在onCreateView方法中
1)首先你必须膨胀你想要添加的布局/视图
如。LinearLayout
LinearLayout ll = inflater.inflate(R.layout.testclassfragment, container, false);
2)然后你可以从布局中找到你的imageView id
ImageView imageView = (ImageView)ll.findViewById(R.id.my_image);
3)返回膨胀的布局
return ll;
方法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);
}
在Fragment类中,我们得到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);
}
}
1)声明布局文件。
public View onCreateView(LayoutInflater inflater,ViewGroup container,
Bundle savedInstanceState) {
return inflate(R.layout.myfragment, container, false);
}
2)然后,获取视图的id
@Override
public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
TextView nameView = (TextView) view.findViewById(R.id.textview1);
}