0

我的应用程序包含导航抽屉。在那里有一个项目片段。在该片段中,我试图实现三个按钮点击事件来打开3个活动。但是,每当我点击导航抽屉中的片段时,应用程序都会与nullPointerAcception一起崩溃。调试后,它显示的问题包含onClickListener下面的代码:应用程序崩溃按钮单击实施后片段

itemButton.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       Intent itemIntent=new Intent(getActivity(),ItemsActivity.class); 
       startActivity(itemIntent); 
      } 
     }); 

这里是我的代码片段。

import android.content.Intent; 
import android.os.Bundle; 
import android.support.v4.app.Fragment; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.Button; 


/** 
* A simple {@link Fragment} subclass. 
*/ 
public class ItemsFragment extends Fragment { 

    Button itemButton; 
    Button categoryButton; 
    Button discountButton; 

    public ItemsFragment() { 
     // Required empty public constructor 
    } 


    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
          Bundle savedInstanceState) { 


     itemButton=(Button) container.findViewById(R.id.items_button); 
     categoryButton=(Button) container.findViewById(R.id.category_button); 
     discountButton=(Button) container.findViewById(R.id.discount_button); 

     itemButton.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       Intent itemIntent=new Intent(getActivity(),ItemsActivity.class); 
       startActivity(itemIntent); 
      } 
     }); 

     setHasOptionsMenu(false); 
     // Inflate the layout for this fragment 
     return inflater.inflate(R.layout.fragment_items, container, false); 
    } 

} 

//该logcat的错误

E/AndroidRuntime: FATAL EXCEPTION: main 
        java.lang.NullPointerException 
         at com.soumya.possystem.ItemsFragment.onCreateView(ItemsFragment.java:36) 
         at android.support.v4.app.Fragment.performCreateView(Fragment.java:2080) 
         at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1108) 
         at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1290) 
         at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:801) 
         at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1677) 
         at android.support.v4.app.FragmentManagerImpl$1.run(FragmentManager.java:536) 
         at android.os.Handler.handleCallback(Handler.java:725) 
         at android.os.Handler.dispatchMessage(Handler.java:92) 
         at android.os.Looper.loop(Looper.java:137) 
         at android.app.ActivityThread.main(ActivityThread.java:5041) 
         at java.lang.reflect.Method.invokeNative(Native Method) 
         at java.lang.reflect.Method.invoke(Method.java:511) 
         at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793) 
         at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560) 
         at dalvik.system.NativeStart.main(Native Method) 
+0

什么是例外? –

+0

请从logcat发布异常堆栈跟踪。 –

+0

[可惜MyApp已停止。如何解决这个问题?(http://stackoverflow.com/questions/23353173/uncomfort-myapp-has-stopped-how-can-i-solve-this) –

回答

4

增加观看之前和创建视图你正在努力寻找的controls.and返回充气鉴于例如在onCreateView

另一种方法是取(findviewByIdonViewCreatedonActivityCreated

第二个问题是您正在尝试从container获得控制的对象,而不是你需要从充气的角度来看。

View v=inflater.inflate(R.layout.fragment_items, container, false); 

下面我一直保持代码的变化。

import android.content.Intent; 
    import android.os.Bundle; 
    import android.support.v4.app.Fragment; 
    import android.view.LayoutInflater; 
    import android.view.View; 
    import android.view.ViewGroup; 
    import android.widget.Button; 


    /** 
    * A simple {@link Fragment} subclass. 
    */ 
    public class ItemsFragment extends Fragment { 

     Button itemButton; 
     Button categoryButton; 
     Button discountButton; 

     public ItemsFragment() { 
      // Required empty public constructor 
     } 


     @Override 
     public View onCreateView(LayoutInflater inflater, ViewGroup container, 
           Bundle savedInstanceState) { 
    View v=inflater.inflate(R.layout.fragment_items, container, false); 
    //check in place of container here you need to use inflated view (`v`) instance 
      itemButton=(Button) v.findViewById(R.id.items_button); 
      categoryButton=(Button) v.findViewById(R.id.category_button); 
      discountButton=(Button) v.findViewById(R.id.discount_button); 

      itemButton.setOnClickListener(new View.OnClickListener() { 
       @Override 
       public void onClick(View v) { 
        Intent itemIntent=new Intent(getActivity(),ItemsActivity.class); 
        startActivity(itemIntent); 
       } 
      }); 

      setHasOptionsMenu(false); 
      // Inflate the layout for this fragment 
      return v; 
     } 

    } 
+0

你可以指定它不工作的具体代码 –

+0

@jiteshmohite请检查代码和评论我一直在哪里NullPointerException给予崩溃 – user1140237

+0

okey现在你已经编辑了谢谢 –

1

你必须初始化视图按规定:
Create a Fragment Class

所以你要做的
View view = inflater.inflate(R.layout.YOUR_LAYOUT, container, false);
然后
itemButton=(Button) view.findViewById(R.id.items_button);

0

试试这个

View rootView = inflater.inflate(R.layout.fragment_id, container, false); 
    itemButton=(Button) container.findViewById(R.id.items_button); 
    categoryButton=(Button) container.findViewById(R.id.category_button); 
    discountButton=(Button) container.findViewById(R.id.discount_button); 
. 
. 
. 

    return rootView; 
0

试试这个:

public class ItemsFragment extends Fragment { 

Button itemButton; 
Button categoryButton; 
Button discountButton; 

public ItemsFragment() { 
    // Required empty public constructor 
} 


@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
         Bundle savedInstanceState) { 
    View v=inflater.inflate(R.layout.fragment_items, container, false); 
    setHasOptionsMenu(false); 
    return v; 
} 

@Override 
public void onViewCreated(View view, @Nullable Bundle savedInstanceState) { 
    super.onViewCreated(view, savedInstanceState); 
    itemButton=(Button) view.findViewById(R.id.items_button); 
    categoryButton=(Button) view.findViewById(R.id.category_button); 
    discountButton=(Button) view.findViewById(R.id.discount_button); 

    itemButton.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      Intent itemIntent=new Intent(getActivity(),ItemsActivity.class); 
      startActivity(itemIntent); 
     } 
    }); 

} 
} 
1
public class ItemsFragment extends Fragment { 

    Button itemButton; 
    Button categoryButton; 
    Button discountButton; 

    public ItemsFragment() { 
     // Required empty public constructor 
    } 


    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
          Bundle savedInstanceState) { 
    /** Inflate rootView of fragment **/ 
    View rootView = inflater.inflate(R.layout.fragment_items, container, false); 

     //replace "container" with "rootView" **/ 
     itemButton=(Button) rootView.findViewById(R.id.items_button); 
     categoryButton=(Button) rootView.findViewById(R.id.category_button); 
     discountButton=(Button) rootView.findViewById(R.id.discount_button); 

     itemButton.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       Intent itemIntent=new Intent(getActivity(),ItemsActivity.class); 
       startActivity(itemIntent); 
      } 
     }); 

     setHasOptionsMenu(false); 
     // Inflate the layout for this fragment 
     return rootView; // Return the view object you inflated 
    } 

} 
+0

我会建议你继续解释这个问题。所以用户可以理解这个问题 – user1140237