2017-08-05 60 views
-1

微調框似乎因爲您可以看到其顏色而創建;但是,您無法選擇它。更糟糕的是,當您添加setPrompt(在下面的代碼中註釋掉)時,會拋出NullPointerException帶setPrompt的Unopenable(程序化)微調框空指針異常

LinearLayout preMadeWrapper = (LinearLayout) findViewById(R.id.myId); 
int firstHeight = (int) getResources().getDimension(R.dimen.firstHeight); 

// Fist Wrapper (blue) 
LinearLayout firstWrapper = new LinearLayout(this,null,0,R.style.centerEverythingStyle); 
LinearLayout.LayoutParams DayDimensionsLinear = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, firstHeight); 
firstWrapper.setOrientation(LinearLayout.HORIZONTAL); 
preMadeWrapper.addView(firstWrapper,DayDimensionsLinear); 
firstWrapper.setBackgroundColor(Color.parseColor("#0000ff")); 

// Second Wrapper (red) 
LinearLayout secondWrapper = new LinearLayout(this,null,0,R.style.centerEverythingStyle); 
LinearLayout.LayoutParams secondWrapperDimensions = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.MATCH_PARENT); 
secondWrapper.setOrientation(LinearLayout.VERTICAL); 
firstWrapper.addView(secondWrapper,secondWrapperDimensions); 
secondWrapper.setBackgroundColor(Color.parseColor("#ff0000")); 

// The Spinner (green) 
Spinner mySpinner = new Spinner(this, null,0,R.style.SpinnerStyle); 
int mySpinnerWidth = (int) getResources().getDimension(R.dimen.mySpinnerWidth); 
int mySpinnerheight = (int) getResources().getDimension(R.dimen.mySpinnerheight); 
Spinner.LayoutParams mySpinnerDimensions = new Spinner.LayoutParams(mySpinnerWidth, mySpinnerheight); 
secondWrapper.addView(mySpinner,mySpinnerDimensions); 
mySpinner.setBackgroundColor(Color.parseColor("#00ff00")); 

// I've tried multiple ArrayAdapter, none help the problem. 

/* ArrayAdapter from ArrayList 
ArrayList<String> spinnerArray = new ArrayList<String>(); 
    spinnerArray.add("first option"); 
    spinnerArray.add("second option"); 
    spinnerArray.add("third option"); 
    spinnerArray.add("forth option"); 
ArrayAdapter<String> spinnerArrayAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, spinnerArray); 
spinnerArrayAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 
mySpinner.setAdapter(spinnerArrayAdapter); 
*/ 

// ArrayAdapter from String Array 
String[] items = {"first option","second option","third option","forth option"}; 
ArrayAdapter<String> adapter = new ArrayAdapter<>(this, android.R.layout.simple_spinner_item, items); 
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 
mySpinner.setAdapter(adapter); 

// ArrayAdapter from Array File. 
//ArrayAdapter<String> spinnerArrayAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_dropdown_item, getResources().getStringArray(R.array.my_arrays)); 
//mySpinner.setAdapter(spinnerArrayAdapter); 

// If you uncomment this you get an error. 
//mySpinner.setPrompt("My Prompt"); 

如果取消對最後一行將得到以下錯誤:

08-05 12:48:55.319 25518-25518/? E/AndroidRuntime: FATAL EXCEPTION: main 
Process: me.tristyn.pointsofinterest, PID: 25518 
java.lang.RuntimeException: Unable to start activity ComponentInfo{me.tristyn.pointsofinterest/me.tristyn.pointsofinterest.activity_item}: java.lang.NullPointerException: Attempt to invoke interface method 'void android.widget.Spinner$SpinnerPopup.setPromptText(java.lang.CharSequence)' on a null object reference 
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2927) 
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2988) 
    at android.app.ActivityThread.-wrap14(ActivityThread.java) 
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1631) 
    at android.os.Handler.dispatchMessage(Handler.java:102) 
    at android.os.Looper.loop(Looper.java:154) 
    at android.app.ActivityThread.main(ActivityThread.java:6682) 
    at java.lang.reflect.Method.invoke(Native Method) 
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1520) 
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1410) 
    Caused by: java.lang.NullPointerException: Attempt to invoke interface method 'void android.widget.Spinner$SpinnerPopup.setPromptText(java.lang.CharSequence)' on a null object reference 
    at android.widget.Spinner.setPrompt(Spinner.java:915) 
    at me.tristyn.pointsofinterest.activity_item.onCreate(activity_item.java:139) 
    at android.app.Activity.performCreate(Activity.java:6942) 
    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1126) 
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2880) 
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2988)  
    at android.app.ActivityThread.-wrap14(ActivityThread.java)  
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1631)  
    at android.os.Handler.dispatchMessage(Handler.java:102)  
    at android.os.Looper.loop(Looper.java:154)  
    at android.app.ActivityThread.main(ActivityThread.java:6682)  
    at java.lang.reflect.Method.invoke(Native Method)  
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1520)  
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1410)  

這似乎暗示微調是null,出於某種原因。

編輯2:我沒有這方面的解決方案,但解決方法是隻是膨脹佈局。

LayoutInflater inflater = LayoutInflater.from(this); 
View inflatedLayout= inflater.inflate(R.layout.myLayout, null, false); 
preMadeWrapper.addView(inflatedLayout); 

回答

0

您可以嘗試下面的代碼爲您的微調;

ArrayList<String> array = new ArrayList<String>(); 
     array.add("first option"); 
     array.add("second option"); 
     array.add("third option"); 
     array.add("fourth option"); 

     ArrayAdapter<String> mAdapter = new ArrayAdapter<String>(getActivity(), R.layout.spinner_item,R.id.spin_text, array); 
     mySpinner.setAdapter(mAdapter); 

     mySpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { 
      @Override 
      public void onItemSelected(AdapterView<?>arg0, View view, int arg2, long arg3) { 

      } 

      @Override 
      public void onNothingSelected(AdapterView<?> arg0) { 
       // TODO Auto-generated method stub 
      } 
     }); 
+0

糾正我,如果我錯了,但不是這只是從ArrayList的ArrayAdapters註釋掉的代碼?我已經嘗試了我已經註釋過的那個。你的ArrayAdaptor確實使用了一個我無法使用的構造函數,因爲它是以編程方式編寫的,並且你指向了一個不同的資源,我不確定它是什麼。另外,聽衆沒有任何影響。 我可能是錯的,但我不認爲這是ArrayAdaptor的問題。 – TrystynAlxander