首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >AdapterView.OnItemSelectedListener返回空视图

AdapterView.OnItemSelectedListener返回空视图
EN

Stack Overflow用户
提问于 2015-01-07 13:49:42
回答 3查看 1.7K关注 0票数 7

我有以下代码:

代码语言:javascript
复制
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的原因是什么?

谢谢

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2019-03-29 11:48:52

它可能是在配置改变后引起的,例如旋转设备。您的自旋器将被重新创建,并且在onItemSelected回调中收到一个空参数。

可以将实现中的视图注释为@nullable,然后

代码语言:javascript
复制
if (view != null) {view.setSelected(true);}

如果您正在使用Kotlin,请尝试如下:

代码语言:javascript
复制
override fun onItemSelected(parent: AdapterView<*>, view: View?, position: Int, id: Long){
    view?.isSelected = true
}
票数 4
EN

Stack Overflow用户

发布于 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?可以为空

票数 2
EN

Stack Overflow用户

发布于 2021-06-03 01:51:31

可以通过旋转阻止可能为null视图的默认选择,然后显式执行setSelection()

代码语言:javascript
复制
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就会导致问题,因为布局已经刷新了。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27820951

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档