android-fragments - 安卓fragment中f的indViewById

  显示原文与译文双语对照的内容

我试图在一个Fragment中创建一个 ImageView,它将引用我在Fragment的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 方法有一个错误,指出该方法未定义。

时间:

使用 getView() 。这将返回Fragment的根视图,这样你就可以调用 findViewById()


ImageView imageView = (ImageView) getView().findViewById(R.id.foo);

你需要扩展Fragment的视图并调用 findViewById() 返回的View


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

我意识到这是个老问题,但目前流行的答案仍然需要。

于later,相关问题的关键不是清除 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;
 }
}

获取Fragment视图,然后从该视图获取你的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;
}

使用它你可以找到你的视图Fragment内like,类你将得到 onViewCreated() 查看 object: 重写方法你应该总是以在该方法中初始化你的观点你去哪


@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() 。 这是填充 Fragment View 变量的正确位置。 下面是一个示例:


class GalleryFragment extends Fragment {
 private Gallery gallery;

 (...)

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

同意在视图中调用 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;
}

在Fragment外部一面这节和类似的方法 methods, getView() 不会 work.

你有两种方法,将视图传递给 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);
 }

...