2015-02-24 57 views
0

我在使下面的代码正常工作时遇到问题。 当我点击图像按钮时,它会崩溃应用程序。 有人可以指出我下面的代码出错了吗?从片段启动FragmentActivity

public class training extends Fragment { 
     ImageButton run; 
     public training() 
     { 
     } 

     @Override 
     public View onCreateView(LayoutInflater inflater, ViewGroup container, 
           Bundle savedInstanceState) 
     { 
      View rootView = inflater.inflate(R.layout.fragment_training, container, false); 


      return rootView; 
     } 
     @Override 
     public void onActivityCreated(Bundle savedInstanceState) { 
      super.onActivityCreated(savedInstanceState); 
      run = (ImageButton) getActivity().findViewById 
        (R.id.StartRunClass); 
      run.setOnClickListener(new View.OnClickListener() { 
       @Override 
       public void onClick(View v) { 
        Intent i= new Intent(getActivity(),Running.class); 
        getActivity().startActivity(i); 
       } 
      }); 


     } 
    } 

所有我在被称为类是

public class Running extends FragmentActivity 
     //implements LocationProvider.LocationCallback { 
    // private GoogleMap mMap; // Might be null if Google Play services APK is not available. 
    //public LocationProvider mLocationProvider; 
{ 
    ImageButton start, stop; 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.fragment_run); 

得到以下运行时错误

02-24 16:12:26.377 30732-30732/project.project E/AndroidRuntime﹕ FATAL EXCEPTION: main 
    java.lang.NullPointerException 
      at project.project.training.run(training.java:38) 
      at project.project.training.onCreateView(training.java:30) 
      at android.app.Fragment.performCreateView(Fragment.java:1695) 
      at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:885) 
      at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:1057) 
      at android.app.BackStackRecord.run(BackStackRecord.java:694) 
      at android.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1435) 
      at android.app.FragmentManagerImpl$1.run(FragmentManager.java:441) 
      at android.os.Handler.handleCallback(Handler.java:800) 
      at android.os.Handler.dispatchMessage(Handler.java:100) 
      at android.os.Looper.loop(Looper.java:194) 
      at android.app.ActivityThread.main(ActivityThread.java:5392) 
      at java.lang.reflect.Method.invokeNative(Native Method) 
      at java.lang.reflect.Method.invoke(Method.java:525) 
      at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:833) 
      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:600) 
      at dalvik.system.NativeStart.main(Native Method) 
+0

那么错误是什么?它可能是因为你的'ImageButton'为空,因为你从错误的地方获取视图 – tyczj 2015-02-24 14:39:47

+0

你可以发布日志!所以这很容易弄清楚 – 2015-02-24 14:55:34

+0

是的,Logcat好吗? – 2015-02-24 15:16:52

回答

0

我敢肯定,问题是getActivity()返回null

覆盖OnAttach和存储连接性的参考:

Activity activity; 

@Override 
public void onAttach(Activity activity) { 
    super.onAttach(activity); 
    this.activity = activity; 
} 

您参考替换getActivity()

@Override 
public void onClick(View v) { 
    Intent i= new Intent(activity,Running.class); 
    activity.startActivity(i); 
} 

编辑

它崩溃,因为run为空。我认为这个问题是您使用findViewByID方式:

run = (ImageButton) getActivity().findViewById(R.id.StartRunClass); 

你应该这样做,在onCreateView和使用rootView代替getActivity

View rootView = inflater.inflate(R.layout.fragment_training, container, false); 
run = (ImageButton) rootView.findViewById(R.id.StartRunClass); 

如果它仍然崩溃,检查fragment_training布局,以确保它包含一个名为StartRunClass的ImageView。

+0

我认为这应该起作用。 – Eenvincible 2015-02-24 15:23:10

+0

我试过了,但仍然得到一个空指针。 – David 2015-02-24 16:16:47

+0

什么是第38行? '在project.project.training.run(training.java:38)' – 2015-02-24 16:23:02