我试图在一个片段中创建一个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方法有一个错误,说明该方法未定义。


当前回答

你必须放大视图

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

其他回答

.commit()之后的事务计时也可能导致此问题

我得到了同样的问题(在片段中的视图无法到达)。原因是,在(FragmentTransaction).commit() -之后,视图没有在UI中被激活。在.commit()之后,事务发生时没有保证;它只是排队。所以我添加了一个(FragmentManager). executependingtransactions()来强制完成事务。之后,引用视图就可以正常工作了!

我喜欢一切都有条理。你可以这样做。

第一个初始化视图

private ImageView imageView;

然后覆盖OnViewCreated

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

然后添加一个void方法来查找视图

private void findViews(View v) {
    imageView = v.findViewById(R.id.img);
}

试试这个,对我有用

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) {

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

通过这种方式,可以将rootView用于xml布局中定义的每个控件,这样代码更加简洁。

希望这对你有所帮助。

Use

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

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

会有用的