2014-03-01 4 views
4

Так что я использую фрагменты и пытаюсь подключить их к кликам.fragment.onCreateView вызывает исключение нулевого указателя

public View onCreateView(LayoutInflater inflater, ViewGroup container, 
      Bundle savedInstanceState) { 
     View contentView = inflater.inflate(R.layout.layout1, null); 
     // View contentView=super.onCreateView(inflater,null,savedInstanceState,R.layout.layout1); 
     startButton= (Button) getView().findViewById(R.id.button); 

Это XML для кнопки

<Button 
      android:layout_width="100dp" 
      android:layout_height="wrap_content" 
      android:text="Start Time" 
      android:id="@+id/button" 
      android:layout_alignParentLeft="true" 
      android:layout_marginLeft="28dp" 
      android:layout_marginTop="10dp" 
      android:background="#1e497c" 
      android:textColor="#ffffff"/> 

Это мое исключение

02-28 16: 49: 57,162 14375-14375/com.example.listviewandroid E/AndroidRuntime: FATAL

EXCEPTION: main 
    java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.listviewandroid/com.example.listviewandroid.MainActivity}: java.lang.NullPointerException 
      at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2245) 
      at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2295) 
      at android.app.ActivityThread.access$700(ActivityThread.java:150) 
      at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1280) 
      at android.os.Handler.dispatchMessage(Handler.java:99) 
      at android.os.Looper.loop(Looper.java:175) 
      at android.app.ActivityThread.main(ActivityThread.java:5279) 
      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:1102) 
      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:869) 
      at dalvik.system.NativeStart.main(Native Method) 
    Caused by: java.lang.NullPointerException 
      at com.example.fragment.Fragment1.onCreateView(Fragment1.java:43) 
      at android.support.v4.app.Fragment.performCreateView(Fragment.java:1478) 
      at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:927) 
      at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1104) 
      at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:682) 
      at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1460) 
      at android.support.v4.app.FragmentActivity.onStart(FragmentActivity.java:556) 
      at android.app.Instrumentation.callActivityOnStart(Instrumentation.java:1181) 
      at android.app.Activity.performStart(Activity.java:5293) 
      at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2218) 
            at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2295) 
            at android.app.ActivityThread.access$700(ActivityThread.java:150) 
            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1280) 
            at android.os.Handler.dispatchMessage(Handler.java:99) 
            at android.os.Looper.loop(Looper.java:175) 
            at android.app.ActivityThread.main(ActivityThread.java:5279) 
            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:1102) 
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:869) 
            at dalvik.system.NativeStart.main(Native Method) 

Его очевидно, что он не может найти кнопку или что-то еще, что я не могу фи вычеркнуть. Любая помощь очень ценится.

ответ

2

Эта линия не имеет никакого смысла:

startButton= (Button) getView().findViewById(R.id.button); 

Вы не имеете представления, все же, вы все еще его создания ..

Вместо вы можете сделать это:

startButton= (Button)contentView.findViewById(R.id.button); 

Или дождитесь, пока метод onCreateView вернет фактический вид, который вы только что создали, и затем вы сможете получить ссылку на представление с помощью метода getView после того, как onCreateView вернет представление.

Надеюсь, что это поможет!

С уважением!

4

Вы не можете использовать getView() до тех пор, пока onCreateView() не будет возвращен, так как это метод, создающий указанное представление. Вы должны изменить свой код

public View onCreateView(LayoutInflater inflater, ViewGroup container, 
      Bundle savedInstanceState) { 
     View contentView = inflater.inflate(R.layout.layout1, null); 
     startButton = (Button) contentView.findViewById(R.id.button); 

Или же, переопределить onViewCreated() и осуществить настройку кнопки в этом методе (с использованием getView().

6

просто использовать это в вашей onCreateView

View contentView = inflater.inflate(R.layout.layout1, container, false); 
    startButton= (Button) contentView.findViewById(R.id.button); 
    return contentView; 
Смежные вопросы