带setPrompt的Unopenable(程序化)微调框空指针异常
问题描述:
微调框似乎因为您可以看到其颜色而创建;但是,您无法选择它。更糟糕的是,当您添加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);
答
您可以尝试下面的代码为您的微调;
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
}
});
纠正我,如果我错了,但不是这只是从ArrayList的ArrayAdapters注释掉的代码?我已经尝试了我已经注释过的那个。你的ArrayAdaptor确实使用了一个我无法使用的构造函数,因为它是以编程方式编写的,并且你指向了一个不同的资源,我不确定它是什么。另外,听众没有任何影响。 我可能是错的,但我不认为这是ArrayAdaptor的问题。 – TrystynAlxander