在 Fragment 中使用 findViewById
Using findViewById inside a Fragment
我正在创建一个新的选项卡界面,每个选项卡都有如下功能:
public class ClassViewFragment extends Fragment {
ListView classListView = null;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.class_view, container, false);
classListView = (ListView) findViewById(R.id.classList);
return rootView;
}
}
但我也在另一个地方得到 cannot resolve method findViewById
我也无法使用 runOnUiThread
并得到 Error:(88, 29) error: cannot find symbol method runOnUiThread(<anonymous Runnable>)
我知道如果我的 class 是从 Activity
扩展而来的,这些会很好用,但它是一个选项卡片段,所以我该如何使用这个功能?
你需要
classListView = (ListView) rootView.findViewById(R.id.classList);
因为那是你关心的观点
要获得 runOnUiThred,您需要执行 getActivity().runOnUiThread
片段没有像Activity那样的findViewById()方法,因此您必须调用片段的根视图的方法。尝试做 rootView.findViewById(R.id.classList) 代替。
您需要使用视图引用 findViewById,
public class ClassViewFragment extends Fragment {
ListView classListView = null;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.class_view, container, false);
classListView = (ListView) rootView .findViewById(R.id.classList);
return rootView;
}
}
因为 runOnUiThread 可能与 Modifying an Android view from a different thread
重复
用它的喜欢,
activity.runOnUiThread(new Runnable());
这里是对findViewById
方法的支持解释;
findViewById()
方法将与您的主布局绑定到的相关对象一起使用。例如,在 activity 中,当您创建
setContentView(activity_main);
您暗示您的 Activity
将从 activity_main
检索其布局。因此,当您在 activity 中创建 findViewById()
时,实际上意味着 this.findViewById()
,其中 this
是您的 Activity
。
因此,在您的情况下,布局 class_view
绑定到 rootView
。但是当你只写findViewById
时,就意味着this.findViewById
。 this
是您所在的范围,在您的情况下是 Fragment
。但是,我认为 Fragment 没有这种能力。所以你应该参考 rootView
来检索你的观点。
rootView.findViewById()
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View v = inflater.inflate(R.layout.fragment_content_mediaplayer, container, false);
mSeekbar = (SeekBar) v.findViewById(R.id.seekBarMusic);
return v;
使用 rootView.findViewById(R.id.classList)
而不是 findViewById(R.id.classList)
。
试试这个:
public class ClassViewFragment extends Fragment {
ListView classListView = null;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.class_view, container, false);
classListView = (ListView) rootView.findViewById(R.id.classList);
return rootView;
}
}
findViewById 必须 运行 在 onViewCreated() 方法中
ListView classListView = null;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
return inflater.inflate(R.layout.class_view, container, false);
}
@Override
public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
classListView = (ListView) view.findViewById(R.id.classList);
}
}`
我正在创建一个新的选项卡界面,每个选项卡都有如下功能:
public class ClassViewFragment extends Fragment {
ListView classListView = null;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.class_view, container, false);
classListView = (ListView) findViewById(R.id.classList);
return rootView;
}
}
但我也在另一个地方得到 cannot resolve method findViewById
我也无法使用 runOnUiThread
并得到 Error:(88, 29) error: cannot find symbol method runOnUiThread(<anonymous Runnable>)
我知道如果我的 class 是从 Activity
扩展而来的,这些会很好用,但它是一个选项卡片段,所以我该如何使用这个功能?
你需要
classListView = (ListView) rootView.findViewById(R.id.classList);
因为那是你关心的观点
要获得 runOnUiThred,您需要执行 getActivity().runOnUiThread
片段没有像Activity那样的findViewById()方法,因此您必须调用片段的根视图的方法。尝试做 rootView.findViewById(R.id.classList) 代替。
您需要使用视图引用 findViewById,
public class ClassViewFragment extends Fragment {
ListView classListView = null;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.class_view, container, false);
classListView = (ListView) rootView .findViewById(R.id.classList);
return rootView;
}
}
因为 runOnUiThread 可能与 Modifying an Android view from a different thread
重复用它的喜欢,
activity.runOnUiThread(new Runnable());
这里是对findViewById
方法的支持解释;
findViewById()
方法将与您的主布局绑定到的相关对象一起使用。例如,在 activity 中,当您创建
setContentView(activity_main);
您暗示您的 Activity
将从 activity_main
检索其布局。因此,当您在 activity 中创建 findViewById()
时,实际上意味着 this.findViewById()
,其中 this
是您的 Activity
。
因此,在您的情况下,布局 class_view
绑定到 rootView
。但是当你只写findViewById
时,就意味着this.findViewById
。 this
是您所在的范围,在您的情况下是 Fragment
。但是,我认为 Fragment 没有这种能力。所以你应该参考 rootView
来检索你的观点。
rootView.findViewById()
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View v = inflater.inflate(R.layout.fragment_content_mediaplayer, container, false);
mSeekbar = (SeekBar) v.findViewById(R.id.seekBarMusic);
return v;
使用 rootView.findViewById(R.id.classList)
而不是 findViewById(R.id.classList)
。
试试这个:
public class ClassViewFragment extends Fragment {
ListView classListView = null;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.class_view, container, false);
classListView = (ListView) rootView.findViewById(R.id.classList);
return rootView;
}
}
findViewById 必须 运行 在 onViewCreated() 方法中
ListView classListView = null;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
return inflater.inflate(R.layout.class_view, container, false);
}
@Override
public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
classListView = (ListView) view.findViewById(R.id.classList);
}
}`