在Fragment中添加布局会导致NullPointerException

时间:2014-02-20 00:11:51

标签: java android android-listview android-fragments

我的Android应用程序遇到了问题。当我尝试在我的ListView中为我的ListView添加视图时,应用程序崩溃了。这是我的LogCat:

java.lang.NullPointerException
        at com.example.foodsaver2.DatabaseFillerFragment$3.onItemClick(DatabaseFillerFragment.java:912)
        at android.widget.AdapterView.performItemClick(AdapterView.java:299)
        at android.widget.AbsListView.performItemClick(AbsListView.java:1113)
        at android.widget.AbsListView$PerformClick.run(AbsListView.java:2904)
        at android.widget.AbsListView$3.run(AbsListView.java:3638)
        at android.os.Handler.handleCallback(Handler.java:733)
        at android.os.Handler.dispatchMessage(Handler.java:95)
        at android.os.Looper.loop(Looper.java:136)
        at android.app.ActivityThread.main(ActivityThread.java:5017)
        at java.lang.reflect.Method.invokeNative(Native Method)
        at java.lang.reflect.Method.invoke(Method.java:515)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)
        at dalvik.system.NativeStart.main(Native Method)

这是我的代码:

  LinearLayout customerLayout = (LinearLayout)view.findViewById(R.id.customerLayout);
  if(customerLayout == null){
       //Inflate the Customer Information View
       LayoutInflater inflater = (LayoutInflater) getActivity().getSystemService(    Context.LAYOUT_INFLATER_SERVICE );
       LinearLayout leftLayout = (LinearLayout)view.findViewById(R.id.rightLayout);
       View customerInfo = getActivity().getLayoutInflater().inflate(R.layout.foodinfo, leftLayout, false);
       leftLayout.addView(customerInfo); //It crashes on this line!
  }

我已经检查过SO和Google一段时间了,我开始感到沮丧。关于这个问题的任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:0)

这里有很多错误。

  1. 您获得了LayoutInflater的实例,但从未使用它
  2. 您将leftLayout分配给ID为R.id.rightLayout
  3. 的视图
  4. 您正在尝试将视图添加到已添加到
  5. 的ViewGroup中

    尝试以下方法:


    LinearLayout customerLayout = (LinearLayout) view.findViewById(R.id.customerLayout);
    if (customerLayout == null) { 
        LayoutInflater inflater = LayoutInflater.from(getActivity());
        LinearLayout layout = (LinearLayout) view.findViewById(R.id.rightLayout);
        inflater.inflate(R.layout.foodinfo, leftLayout);
    }
    

    inflate(int, ViewGroup)inflate(int, ViewGroup, boolean)会自动将View添加到父ViewGroup(除非第3个布尔参数设置为false)。 leftLayout可能会解析为null,在这种情况下,您应确保view包含ID为@id/rightLayout的视图。

相关问题