findViewById 返回 null(再次)

findViewById returning null (once again)

我已经浏览了大部分我能找到解决方案的问题,但 none 的建议似乎是我的问题。我已尝试清理和重建项目并重新启动 android 工作室。确保在我尝试检索 UI 元素之前完成膨胀,并且我尝试放置 findViewById 几种不同的方法。这是我认为应该的方式(但仍然不起作用)。在提交片段事务后,我还尝试在父 activity 的 Create 中检索其他视图。也没有成功。

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    super.onCreateView(inflater, container, savedInstanceState);
    View v = inflater.inflate(R.layout.search_fragment,container,false);

    seekBarDuration = (SeekBar) getActivity().findViewById(R.id.seekBarDuration);
    return v;
}

@Override
public void onActivityCreated (Bundle savedInstanceState) {
    super.onActivityCreated(savedInstanceState);
    seekBarDuration.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {

应用程序在最后一行崩溃,因为 seekBarDuration 是空引用。 Seekbar 位于片段自己的布局中。

不要在 onCreateView()getActivity() 上调用 findViewById()。在你刚刚充气的 View 上调用它。

IOW,替换:

seekBarDuration = (SeekBar) getActivity().findViewById(R.id.seekBarDuration);

与:

seekBarDuration = (SeekBar) v.findViewById(R.id.seekBarDuration);

您好,您正试图从 Activity 获取它,而您已声明您的观点在 片段 上`,像这样更改您的代码。

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        super.onCreateView(inflater, container, savedInstanceState);
        View v = inflater.inflate(R.layout.search_fragment,container,false);

        seekBarDuration = (SeekBar) v.findViewById(R.id.seekBarDuration);
//Also set listener in here since seekBarDuration is on the Fragment not in Activity
  seekBarDuration.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {});


        return v;
    }

    @Override
    public void onActivityCreated (Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);
    //This is called when the Activity is created, not the fragment.
}

我还更改了设置 listener 的位置,您可以将其留在 @onCreateView 内,或者使 Fragment 实现 并设置为 seekBarDuration.setOnSeekbarChangeListener(this);

希望对您有所帮助。

有关 Documentation

的更多信息