2016-09-21 132 views
0

我想在我的片段中添加微調框和偵聽器。 Android的工作室沒有任何錯誤報告給我,但是當我運行它,它與這個致命異常崩潰:setOnItemSelectedListener()用於片段中的微調框

14267-14267/? E/AndroidRuntime: FATAL EXCEPTION: main 
               Process: space.markwen.www.units, PID: 14267 
               java.lang.RuntimeException: Unable to start activity ComponentInfo{space.markwen.www.units/space.markwen.www.units.MainActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'android.view.View android.view.View.findViewById(int)' on a null object reference 
                at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2456) 
                at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2539) 
                at android.app.ActivityThread.access$900(ActivityThread.java:159) 
                at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1384) 
                at android.os.Handler.dispatchMessage(Handler.java:102) 
                at android.os.Looper.loop(Looper.java:152) 
                at android.app.ActivityThread.main(ActivityThread.java:5507) 
                at java.lang.reflect.Method.invoke(Native Method) 
                at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726) 
                at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616) 
               Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'android.view.View android.view.View.findViewById(int)' on a null object reference 
                at space.markwen.www.units.LengthActivity.onCreate(LengthActivity.java:40) 
                at android.app.Fragment.performCreate(Fragment.java:2198) 
                at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:942) 
                at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:1148) 
                at android.app.BackStackRecord.run(BackStackRecord.java:793) 
                at android.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1535) 
                at android.app.FragmentController.execPendingActions(FragmentController.java:325) 
                at android.app.Activity.performStart(Activity.java:6320) 
                at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2419) 
                at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2539)  
                at android.app.ActivityThread.access$900(ActivityThread.java:159)  
                at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1384)  
                at android.os.Handler.dispatchMessage(Handler.java:102)  
                at android.os.Looper.loop(Looper.java:152)  
                at android.app.ActivityThread.main(ActivityThread.java:5507)  
                at java.lang.reflect.Method.invoke(Native Method)  

片段類:

public class LengthActivity extends Fragment { 

    View lengthView; 

    @Nullable 
    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
     // Change FrameLayout to content_length 
     lengthView = inflater.inflate(R.layout.content_length, container, false); 
     // Change the title on titlebar to Length 
     ((AppCompatActivity)getActivity()).getSupportActionBar().setTitle("Length"); 
     return lengthView; 
    } 

    Spinner spinner; 
    String[] lengthUnits = { 
      "Kilometer", "Meter", "Centimeter", "Millimeter", "Micrometer", "Nanometer", "Mile", "Yard", "Foot", "Inch", "Nautical Mile"}; 

    @Override 
    public void onCreate (Bundle savedInstanceState){ 
     super.onCreate(savedInstanceState); 
     spinner = (Spinner) getView().findViewById(R.id.lengthSpinner); 
     spinner.setOnItemSelectedListener(new OnItemSelectedListener() { 
      public void onItemSelected(AdapterView<?> parent, View view, 
             int position, long id) { 

      } 

      @Override 
      public void onNothingSelected(AdapterView<?> parent) { 

      } 
     }); 
     ArrayAdapter<String> adapter = new ArrayAdapter<String> (getActivity(), android.R.layout.simple_spinner_item, lengthUnits); 
     adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 
     spinner.setAdapter(adapter); 
    } 

} 

而我萬一視圖中可以找到的東西出來的:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" android:layout_height="match_parent" 
    android:weightSum="1"> 

    <EditText 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:inputType="numberDecimal" 
     android:ems="10" 
     android:id="@+id/editText" 
     android:layout_alignParentTop="true" 
     android:layout_alignParentLeft="true" 
     android:layout_alignParentStart="true" 
     android:textSize="30dp" 
     android:layout_weight="1.01" /> 

    <Spinner 
     android:layout_width="112dp" 
     android:layout_height="57dp" 
     android:id="@+id/lengthSpinner" /> 
    <!--android:layout_below="@+id/editText"--> 
     android:layout_alignParentLeft="true" 
     android:layout_alignParentStart="true" 
     android:layout_marginTop="42dp" /> 
</LinearLayout> 

感謝

回答

1

把你所有的onCreate()有限公司從—崩潰的行開始,到onViewCreated()。直到onCreateView()被調用,並且onCreate()將在onCreateView()之前調用,您將無法執行任何操作。在onCreateView()之後onViewCreated()被稱爲

+0

我試了一下,但同樣的錯誤依然存在 – thousight

+0

哦,後來我發現,這是因爲角度的空在片段中,所以我需要使用從充氣器獲得的lengthView來獲取微調器。現在事情正在起作用。謝謝 – thousight

0

誠如通過CommonsWare,工作示例的基本組成是這樣的:

enter public class Booking extends Fragment { 

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
         Bundle savedInstanceState) { 
    // Inflate the layout for this fragment 
    View rootView = inflater.inflate(R.layout.fragment_booking, container, false); 
return rootView; 
} 


public void onViewCreated(View rootView, Bundle savedInstanceState){ 
    super.onViewCreated(rootView, savedInstanceState); 
    final View v = rootView; 
// Spinner element 
Spinner spinner = (Spinner) rootView.findViewById(R.id.spinner); 

//spinner.setOnItemClickListener(this); 

// Spinner Drop down elements 
List<String> categories = new ArrayList<String>(); 
categories.add("4 Night/5 Days"); 
categories.add("5 Night/6 Days"); 
categories.add("6 Night/7 Days"); 
categories.add("7 Night/8 Days"); 

// Creating adapter for spinner 
ArrayAdapter<String> dataAdapter = new ArrayAdapter<String>(getActivity(), android.R.layout.simple_spinner_item, categories); 

// Drop down layout style - list view with radio button 
dataAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 

// attaching data adapter to spinner 
spinner.setAdapter(dataAdapter); 


// Spinner click listener 
spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { 
    public void onItemSelected(AdapterView<?> parent, View view, 
           int position, long id) { 

     // On selecting a spinner item 
     String item = parent.getItemAtPosition(position).toString(); 


     // Showing selected spinner item 
     Toast.makeText(parent.getContext(), "Selected: " + item, Toast.LENGTH_LONG).show(); 

    } 

    @Override 
    public void onNothingSelected(AdapterView<?> parent) { 

    } 
}); 
} 
}