我有以下代码:
public class OnboardingActivity extends BaseLoggedInActivity
implements CountryPickerDialog.ICountryPickerDialogUsers, AdapterView.OnItemSelectedListener {
private Spinner _countryCodeSpinner;
.
.
.
private void setupCountrySpinner() {
List<String> sortedCountryCodeList = CountryData.getInstance().getSortedCountryCodes();
ArrayAdapter<String> adapter = new ArrayAdapter<>(this,
R.layout.country_code_spinner_item,
sortedCountryCodeList);
_countryCodeSpinner.setOnItemSelectedListener(this);
_countryCodeSpinner.setAdapter(adapter);
_countryCodeSpinner
.setOnTouchListener(getCountryCodeSpinnerTouchListener(_countryCodeSpinner));
int position = getDefaultCountryNamePosition();
if (position >= 0) {
_countryCodeSpinner.setSelection(position);
}
}
.
.
.
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
_logger.debug("Inside onItemSelected");
view.setSelected(true);
}在上面的函数onItemSelected中,我得到了一个空指针异常。它返回空视图。这个跟踪是从其中一个用户那里接收到的,但是我无法自己复制它。使用空视图调用onItemSelected的原因是什么?
谢谢
发布于 2019-03-29 11:48:52
它可能是在配置改变后引起的,例如旋转设备。您的自旋器将被重新创建,并且在onItemSelected回调中收到一个空参数。
可以将实现中的视图注释为@nullable,然后
if (view != null) {view.setSelected(true);}如果您正在使用Kotlin,请尝试如下:
override fun onItemSelected(parent: AdapterView<*>, view: View?, position: Int, id: Long){
view?.isSelected = true
}发布于 2021-02-14 06:46:38
很晚的回答我还是不知道是怎么回事,但是你需要改变view :View
当视图不可雪崩时,@Override public void onItemSelected(AdapterView<?> parent, View view, int position, long id) { _logger.debug("Inside onItemSelected"); view.setSelected(true); } view:View?可以为空
发布于 2021-06-03 01:51:31
可以通过旋转阻止可能为null视图的默认选择,然后显式执行setSelection():
int position = getDefaultCountryNamePosition();
if (position < 0) {
position = 0;
}
// Block default selection to custom onItemSelected() from listener initialization
//, see https://stackoverflow.com/a/37561529/1074998
// + 1 as fake value because onItemSelected() only triggered by setSelection() if different value.
_countryCodeSpinner.setSelection(position + 1, false);
_countryCodeSpinner.setOnItemSelectedListener(this);
// position(without + 1) is our real target.
// set selection explicitly should not null now
_countryCodeSpinner.setSelection(position, false); 注意,如果您在onItemSelected()内更改UI,那么只需捕获null就会导致问题,因为布局已经刷新了。
https://stackoverflow.com/questions/27820951
复制相似问题