安卓5.0上Spinner出现故障

7

我的Android项目构建目标是5.1.1 API 22。

这个应用在除了Lollipop以外的所有操作系统版本上都可以工作。Lollipop改变了某些活动的高度(使可滚动布局失效),还破坏了旋转选择器。

在旋转选择器上点击一个特定位置会在应用中输入不同的位置。我不知道为什么,也不知道怎样解决。在某些情况下,即使你在旋转选择器上点击一个按钮,它也会注册旋转选择器上最底部可见的按钮。对于某些旋转选择器,它甚至无法让用户滚动。

我有一个功能失效的旋转选择器代码如下:

ArrayAdapter<String>adapterl4 = new ArrayAdapter<String>(this,
        android.R.layout.simple_spinner_item,hbmlevel){ 
            public boolean isEnabled(int position){
                displayData(position);
                return true;
            }
        };
selecthbm = (Spinner)findViewById(R.id.selecthbmlvl);
adapterl4.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
selecthbm.setAdapter(adapterl4);
selecthbm.setOnItemSelectedListener(this);

我还尝试过为函数 displayData 使用全局变量,但我仍然得到相同的结果。

这个应用程序是一个非常基本的应用程序,你可以在这里下载 这里 ,并且正在运行Java编译器兼容性级别1.7。

我的xml开头看起来像这样:

<ScrollView xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="fill_parent"
    xmlns:ads="http://schemas.android.com/apk/res-auto"
    android:fillViewport="true"
    android:background="#C2DFFF">

<LinearLayout 
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical" >

显示数据:

public void displayData(int pos){

    herolvlTV.setText(hbmherolvl[pos]);
    hbmshardTV.setText(getResources().getString(R.string.shards)+" " +String.valueOf(hbmshards[pos]));
    hbmexpTV.setText(getResources().getString(R.string.maxexp)+" " +String.valueOf(hbmmaxexp[pos]));
}

方法 displayData 是用来做什么的? - Vladimir Petrakovich
你为什么要在 isEnabled() 中这样做?你应该在 getView() 中这样做。 - Vladimir Petrakovich
@fRoStBiT 对于其他一些旋转器,我实际上会根据位置禁用它。我只是让所有旋转器的代码保持一致。你是在暗示isEnabled()在Lollipop上无法正常工作吗? - krikara
1
我认为这个方法不应该有副作用。它可能会在不同版本的Android上的不同条件下被调用。这可能是不正确行为的原因。 - Vladimir Petrakovich
@fRoStBiT 好的,你知道什么会起作用吗?我现在没有棒棒糖可用,所以我必须一直向别人请求测试。你认为我只需要为Spinner使用setOnItemSelectedListener吗? - krikara
显示剩余5条评论
2个回答

3
这里是问题所在:
ArrayAdapter<String>adapterl4 = new ArrayAdapter<String>(this,
        android.R.layout.simple_spinner_item,hbmlevel){ 
            public boolean isEnabled(int position){
                displayData(position);
                return true;
            }
        };

isEnabled 函数在 Lollipop 上无法正常工作。解决方法是将 selecthbm.setOnItemSelectedListener(this); 修改为 selecthbm.setOnItemSelectedListener(new OnItemSelectedListener(){...}); 并完全删除 isEnabled 函数。

但我不知道为什么 isEnabled 函数不能用。如果有人能提供解释,我会奖励赏金。


2

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接