草庐IT

android - 带有动态列表的数字选择器

coder 2023-12-06 原文

我一直在用动态列表实现 numpicker,即,在某些事件上发生变化,比如说它可能是按钮点击或其他。问题是,每当我将列表从较大长度切换到较小长度时,它会起作用,而从较小长度切换到较大长度时,它不会改变,虽然我总是将第一个项目设置为选定项目,但它会崩溃。

代码:

public class MainActivity extends Activity {
    NumberPicker numPicker = null;
    String values1[]    =   null;

    String values2[]    =   null;

    String values3[]    =   null;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        values1 =new String []{
                "Yello",
                "Red",
                "White",
                "Green",
                "Black"
        };
        values2 =new String []{
                "Mango",
                "Orange"
        };
        values3 =new String []{
                "Class",
                "Pointer",
                "Function",
                "Interafce",
                "Constructor"
        };



        numPicker = (NumberPicker)findViewById(R.id.numberPicker1);
        numPicker.setDisplayedValues(values1);

        if(values1.length>1)
        {
            numPicker.setMaxValue(values1.length-1);
        }
        else
        {
            numPicker.setMaxValue(values1.length);          
        }
        numPicker.setMinValue(0);   
        numPicker.setValue(0);
        numPicker.setBackgroundColor(1);
        numPicker.setWrapSelectorWheel(false);
        numPicker.setDescendantFocusability(NumberPicker.FOCUS_BLOCK_DESCENDANTS);


        //On value change listner for changing values

        /*      //For Tint Values
        numPicker.setOnValueChangedListener(new NumberPicker.OnValueChangeListener() {
            @Override
            public void onValueChange(NumberPicker numPic, int arg1, int arg2) {
                numPickerNewVal = values[numPic.getValue()].trim();

                tintTemp = getSelectedTintValue(numPickerNewVal);


            }
        });*/



    }
    public void onClick(View v)
    {
        switch(v.getId())
        {
        case R.id.button1:
            
            if(values1.length>1)
            {
                numPicker.setMaxValue(values1.length-1);
            }
            else
            {
                numPicker.setMaxValue(values1.length);          
            }
            numPicker.setMinValue(0);   
            numPicker.setValue(0);
            numPicker.setDisplayedValues(values1);
            break;
        case R.id.button2:
            
            if(values2.length>1)
            {
                numPicker.setMaxValue(values2.length-1);
            }
            else
            {
                numPicker.setMaxValue(values2.length);          
            }
            numPicker.setMinValue(0);   
            numPicker.setValue(0);
            numPicker.setDisplayedValues(values2);
            break;
        case R.id.button3:
            
            if(values3.length>1)
            {
                numPicker.setMaxValue(values3.length-1);
            }
            else
            {
                numPicker.setMaxValue(values3.length);          
            }
            numPicker.setMinValue(0);   
            numPicker.setValue(0);
            numPicker.setDisplayedValues(values3);
            break;
        }
    }

}

日志:

06-20 13:02:16.712: E/AndroidRuntime(16793): FATAL EXCEPTION: main
06-20 13:02:16.712: E/AndroidRuntime(16793): java.lang.IllegalStateException: Could not execute method of the activity
06-20 13:02:16.712: E/AndroidRuntime(16793):    at android.view.View$1.onClick(View.java:3606)
06-20 13:02:16.712: E/AndroidRuntime(16793):    at android.view.View.performClick(View.java:4211)
06-20 13:02:16.712: E/AndroidRuntime(16793):    at android.view.View$PerformClick.run(View.java:17446)
06-20 13:02:16.712: E/AndroidRuntime(16793):    at android.os.Handler.handleCallback(Handler.java:725)
06-20 13:02:16.712: E/AndroidRuntime(16793):    at android.os.Handler.dispatchMessage(Handler.java:92)
06-20 13:02:16.712: E/AndroidRuntime(16793):    at android.os.Looper.loop(Looper.java:153)
06-20 13:02:16.712: E/AndroidRuntime(16793):    at android.app.ActivityThread.main(ActivityThread.java:5297)
06-20 13:02:16.712: E/AndroidRuntime(16793):    at java.lang.reflect.Method.invokeNative(Native Method)
06-20 13:02:16.712: E/AndroidRuntime(16793):    at java.lang.reflect.Method.invoke(Method.java:511)
06-20 13:02:16.712: E/AndroidRuntime(16793):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:833)
06-20 13:02:16.712: E/AndroidRuntime(16793):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:600)
06-20 13:02:16.712: E/AndroidRuntime(16793):    at dalvik.system.NativeStart.main(Native Method)
06-20 13:02:16.712: E/AndroidRuntime(16793): Caused by: java.lang.reflect.InvocationTargetException
06-20 13:02:16.712: E/AndroidRuntime(16793):    at java.lang.reflect.Method.invokeNative(Native Method)
06-20 13:02:16.712: E/AndroidRuntime(16793):    at java.lang.reflect.Method.invoke(Method.java:511)
06-20 13:02:16.712: E/AndroidRuntime(16793):    at android.view.View$1.onClick(View.java:3601)
06-20 13:02:16.712: E/AndroidRuntime(16793):    ... 11 more
06-20 13:02:16.712: E/AndroidRuntime(16793): Caused by: java.lang.ArrayIndexOutOfBoundsException: length=2; index=4
06-20 13:02:16.712: E/AndroidRuntime(16793):    at android.widget.NumberPicker.ensureCachedScrollSelectorValue(NumberPicker.java:1722)
06-20 13:02:16.712: E/AndroidRuntime(16793):    at android.widget.NumberPicker.initializeSelectorWheelIndices(NumberPicker.java:1537)
06-20 13:02:16.712: E/AndroidRuntime(16793):    at android.widget.NumberPicker.setMaxValue(NumberPicker.java:1345)
06-20 13:02:16.712: E/AndroidRuntime(16793):    at com.example.numpicker.MainActivity.onClick(MainActivity.java:85)
06-20 13:02:16.712: E/AndroidRuntime(16793):    ... 14 more

最佳答案

onClick 中的 setMaxValue 之前调用 setDisplayedValues(null)

关于android - 带有动态列表的数字选择器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24322181/

有关android - 带有动态列表的数字选择器的更多相关文章

  1. ruby - RVM 使用列表[0] - 2

    是否有类似“RVMuse1”或“RVMuselist[0]”之类的内容而不是键入整个版本号。在任何时候,我们都会看到一个可能包含5个或更多ruby的列表,我们可以轻松地键入一个数字而不是X.X.X。这也有助于rvmgemset。 最佳答案 这在RVM2.0中是可能的=>https://docs.google.com/document/d/1xW9GeEpLOWPcddDg_hOPvK4oeLxJmU3Q5FiCNT7nTAc/edit?usp=sharing-知道链接的任何人都可以发表评论

  2. ruby - 查找字符串中的内容类型(数字、日期、时间、字符串等) - 2

    我正在尝试解析一个CSV文件并使用SQL命令自动为其创建一个表。CSV中的第一行给出了列标题。但我需要推断每个列的类型。Ruby中是否有任何函数可以找到每个字段中内容的类型。例如,CSV行:"12012","Test","1233.22","12:21:22","10/10/2009"应该产生像这样的类型['integer','string','float','time','date']谢谢! 最佳答案 require'time'defto_something(str)if(num=Integer(str)rescueFloat(s

  3. ruby - Rails 3 的 RGB 颜色选择器 - 2

    状态:我正在构建一个应用程序,其中需要一个可供用户选择颜色的字段,该字段将包含RGB颜色代码字符串。我已经测试了一个看起来很漂亮但效果不佳的。它是“挑剔的颜色”,并托管在此存储库中:https://github.com/Astorsoft/picky-color.在这里我打开一个关于它的一些问题的问题。问题:请建议我在Rails3应用程序中使用一些颜色选择器。 最佳答案 也许页面上的列表jQueryUIDevelopment:ColorPicker为您提供开箱即用的产品。原因是jQuery现在包含在Rails3应用程序中,因此使用基

  4. 区块链之加解密算法&数字证书 - 2

    目录一.加解密算法数字签名对称加密DES(DataEncryptionStandard)3DES(TripleDES)AES(AdvancedEncryptionStandard)RSA加密法DSA(DigitalSignatureAlgorithm)ECC(EllipticCurvesCryptography)非对称加密签名与加密过程非对称加密的应用对称加密与非对称加密的结合二.数字证书图解一.加解密算法加密简单而言就是通过一种算法将明文信息转换成密文信息,信息的的接收方能够通过密钥对密文信息进行解密获得明文信息的过程。根据加解密的密钥是否相同,算法可以分为对称加密、非对称加密、对称加密和非

  5. 安卓apk修改(Android反编译apk) - 2

    最近因为项目需要,需要将Android手机系统自带的某个系统软件反编译并更改里面某个资源,并重新打包,签名生成新的自定义的apk,下面我来介绍一下我的实现过程。APK修改,分为以下几步:反编译解包,修改,重打包,修改签名等步骤。安卓apk修改准备工作1.系统配置好JavaJDK环境变量2.需要root权限的手机(针对系统自带apk,其他软件免root)3.Auto-Sign签名工具4.apktool工具安卓apk修改开始反编译本文拿Android系统里面的Settings.apk做demo,具体如何将apk获取出来在此就不过多介绍了,直接进入主题:按键win+R输入cmd,打开命令窗口,并将路

  6. ruby-on-rails - 带有 Zeus 的 RSpec 3.1,我应该在 spec_helper 中要求 'rspec/rails' 吗? - 2

    使用rspec-rails3.0+,测试设置分为spec_helper和rails_helper我注意到生成的spec_helper不需要'rspec/rails'。这会导致zeus崩溃:spec_helper.rb:5:in`':undefinedmethod`configure'forRSpec:Module(NoMethodError)对thisissue最常见的回应是需要'rspec/rails'。但这是否会破坏仅使用spec_helper拆分rails规范和PORO规范的全部目的?或者这无关紧要,因为Zeus无论如何都会预加载Rails?我应该在我的spec_helper中做

  7. ruby - 在 Ruby 中动态创建数组 - 2

    有没有办法在Ruby中动态创建数组?例如,假设我想遍历用户输入的书籍数组:books=gets.chomp用户输入:"TheGreatGatsby,CrimeandPunishment,Dracula,Fahrenheit451,PrideandPrejudice,SenseandSensibility,Slaughterhouse-Five,TheAdventuresofHuckleberryFinn"我把它变成一个数组:books_array=books.split(",")现在,对于用户输入的每一本书,我想用Ruby创建一个数组。伪代码来做到这一点:x=0books_array.

  8. Ruby:如何使用带有散列的 'send' 方法调用方法? - 2

    假设我有一个类A,里面有一些方法。假设stringmethodName是这些方法之一,我已经知道我想给它什么参数。它们在散列中{'param1'=>value1,'param2'=>value2}所以我有:params={'param1'=>value1,'param2'=>value2}a=A.new()a.send(methodName,value1,value2)#callmethodnamewithbothparams我希望能够通过传递我的哈希以某种方式调用该方法。这可能吗? 最佳答案 确保methodName是一个符号,而

  9. ruby - 我正在学习编程并选择了 Ruby。我应该升级到 Ruby 1.9 吗? - 2

    我完全不是程序员,正在学习使用Ruby和Rails框架进行编程。我目前正在使用Ruby1.8.7和Rails3.0.3,但我想知道我是否应该升级到Ruby1.9,因为我真的没有任何升级的“遗留”成本。缺点是什么?我是否会遇到与普通gem的兼容性问题,或者甚至其他我不太了解甚至无法预料的问题? 最佳答案 你应该升级。不要坚持从1.8.7开始。如果您发现不支持1.9.2的gem,请避免使用它们(因为它们很可能不被维护)。如果您对gem是否兼容1.9.2有任何疑问,您可以在以下位置查看:http://www.railsplugins.or

  10. ruby - 是否可以将 IRB 提示配置为动态更改? - 2

    我想在IRB中浏览文件系统并让提示更改以反射(reflect)当前工作目录,但我不知道如何在每个命令后进行提示更新。最终,我想在日常工作中更多地使用IRB,让bash溜走。我在我的.irbrc中试过这个:require'fileutils'includeFileUtilsIRB.conf[:PROMPT][:CUSTOM]={:PROMPT_N=>"\e[1m:\e[m",:PROMPT_I=>"\e[1m#{pwd}>\e[m",:PROMPT_S=>"FOO",:PROMPT_C=>"\e[1m#{pwd}>\e[m",:RETURN=>""}IRB.conf[:PROMPT_MO

随机推荐