尝试调用虚方法

时间:2014-02-24 17:54:50

标签: java android android-fragments android-activity nullpointerexception

我正在尝试在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

3 个答案:

答案 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);