我正在尝试在LinearLayouts
中获得一些onCreateView
,但我的应用程序崩溃了以下消息:
23430-23430/? W/System.err﹕ java.lang.NullPointerException: Attempt to invoke virtual method 'android.view.View android.view.View.findViewById(int)' on a null object reference
以下是代码:
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.fragment_main, container, false);
new Body().execute();
card01 = (LinearLayout) getView().findViewById(R.id.card01);
card02 = (LinearLayout) getView().findViewById(R.id.card02);
card03 = (LinearLayout) getView().findViewById(R.id.card03);
card04 = (LinearLayout) getView().findViewById(R.id.card04);
card05 = (LinearLayout) getView().findViewById(R.id.card05);
card06 = (LinearLayout) getView().findViewById(R.id.card06);
card01.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(getActivity(), "Card Clicked", Toast.LENGTH_SHORT).show();
}
});
return rootView;
}
这是一个纯Fragment
类。调用此Activity
的{{1}}不包含此Fragment
。我做错了吗? Fragment
是否应始终在Fragment
?
按要求提供整个Activity
:
AsyncTask
答案 0 :(得分:12)
更改为
card01 = (LinearLayout) rootView.findViewById(R.id.card01);
card02 = (LinearLayout) rootView.findViewById(R.id.card02);
card03 = (LinearLayout) rootView.findViewById(R.id.card03);
card04 = (LinearLayout) rootView.findViewById(R.id.card04);
card05 = (LinearLayout) rootView.findViewById(R.id.card05);
card06 = (LinearLayout) rootView.findViewById(R.id.card06);
你夸大一个布局。视图属于膨胀的布局。因此,使用视图对象初始化onCreateView
片段由Acitvity
托管您可以在getView
中使用onActivityCreated
并初始化视图
在onCreateView
中初始化TextView。由于Asynctask是一个内部类,你可以更新ui
声明
RobotoTextView date_widget2;
作为实例变量
然后在onCreateView
date_widget2= (RobotoTextView) rootView.findViewById(R.id.date02);
答案 1 :(得分:6)
您过早地致电getView()
- 它只会从onCreateView()
返回您自己返回的视图。
在onCreateView()
内使用最近夸大的rootView
代替getView()
。
答案 2 :(得分:0)
在我尝试制作组件扩展视图时导致的NullPointerException
相同,这可能是由于使用了LayoutInflater
View view = LayoutInflater.from(context).inflate(R.layout.layout_index_bar, null);
container = (LinearLayout) view.findViewById(R.id.indexContainer);