我正在创建一个新的Tab界面,对于每个标签我都有以下功能:
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>)
我知道如果我的课程从Activity
扩展而且这是一个标签片段,那么这些方法会正常工作,那么我该如何使用这个功能呢?
答案 0 :(得分:6)
你需要
classListView = (ListView) rootView.findViewById(R.id.classList);
因为那是您关注的视图
要获得runOnUiThred,您需要执行getActivity().runOnUiThread
答案 1 :(得分:6)
您需要使用视图
引用findViewByIdpublic 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());
答案 2 :(得分:2)
以下是findViewById
方法的海岸解释;
findViewById()
方法将与您的主布局绑定的相关对象一起使用。例如,在活动中,当您进行
setContentView(activity_main);
您暗示您的Activity
将从activity_main
检索其布局。因此,当您在活动中制作findViewById()
时,实际上意味着this.findViewById()
,其中this
是您的Activity
。
因此,在您的情况下,布局class_view
绑定到rootView
。但是当你写findViewById
时,就意味着this.findViewById
。 this
是您所在的范围,在您的情况下是Fragment
。但是,我不认为Fragment具有这种能力。因此,您应该参考rootView
来检索您的观点。
rootView.findViewById()
答案 3 :(得分:1)
片段没有像Activity这样的findViewById()方法,所以你必须调用片段根视图的方法。尝试改为使用rootView.findViewById(R.id.classList)。
答案 4 :(得分:0)
@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;
答案 5 :(得分:0)
使用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;
}
}
答案 6 :(得分:0)
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);
}
}`