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);
希望对您有所帮助。
的更多信息
我已经浏览了大部分我能找到解决方案的问题,但 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);
希望对您有所帮助。
的更多信息