【问题标题】:How to pass a selected spinner item between spinners?如何在微调器之间传递选定的微调器项目?
【发布时间】:2015-12-24 17:06:02
【问题描述】:

经过彻底的搜索和相当多的思考,我在AndroidStudio中找不到以下问题的解决方案:

我有 2 个微调器(输入和输出)。我想将输入微调器的值传递给在选择输出微调器(onItemSelected)的值时调用的方法。相关代码如下:

private void setupSpinnerListeners() {

    spinnerLengthInput.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
        @Override
        public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
            String itemSelectedInSpinnerLengthInput = parent.getItemAtPosition(position).toString();
            checkIfConvertingFromMeter(itemSelectedInSpinnerLengthInput);
        }

        @Override
        public void onNothingSelected(AdapterView<?> parent) {

        }
    });

    spinnerLengthOutput.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
        @Override
        public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
            String itemSelectedInSpinnerLengthOutput = parent.getItemAtPosition(position).toString();
            updateOutputTextfield(itemSelectedInSpinnerLengthInput, itemSelectedInSpinnerLengthOutput);
        }

        @Override
        public void onNothingSelected(AdapterView<?> parent) {

        }
    });
}

我希望 String itemSelectedInSpinnerLengthInput(从输入微调器获取其值)在输出微调器的 onItemSelected 方法中可用。如何做到这一点? 非常感谢任何帮助。

编辑:在 setupSpinnerListeners 方法中创建一个全局变量,这是一个长度为 1 的数组。它会按我的预期工作。

【问题讨论】:

    标签: java android methods spinner android-spinner


    【解决方案1】:

    您应该将 itemSelectedInSpinnerLengthOutput 更改为全局变量。之后,您可以在输出微调器的 onItemSelected 方法中轻松访问它

    String itemSelectedInSpinnerLengthInput; // global variable
        private void setupSpinnerListeners() {
    
            spinnerLengthInput.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
                @Override
                public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
                    itemSelectedInSpinnerLengthInput = parent.getItemAtPosition(position).toString();
                    checkIfConvertingFromMeter(itemSelectedInSpinnerLengthInput);
                }
    
                @Override
                public void onNothingSelected(AdapterView<?> parent) {
    
                }
            });
    
            spinnerLengthOutput.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
                @Override
                public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
                    String itemSelectedInSpinnerLengthOutput = parent.getItemAtPosition(position).toString();
                    if(itemSelectedInSpinnerLengthInput != null){
                            updateOutputTextfield(itemSelectedInSpinnerLengthInput, itemSelectedInSpinnerLengthOutput);
                    }else{
                         Toast.makeText(getApplicationContext(), "please select input", Toast.LENGTH_LONG).show();
                         ...
                    }
                }
    
                @Override
                public void onNothingSelected(AdapterView<?> parent) {
    
                }
            });
        }
    

    希望有帮助

    【讨论】:

    • 这不起作用,因为这将导致空对象引用。初始化全局变量时,您不给它一个值。
    • 所以你应该在输出微调器的 onItemSelected 方法中检查 null 值
    • 不幸的是,我不知道你的意思。能否进一步解释一下?
    • 尽管我不喜欢在我的应用程序启动时弹出的 toast,但它已经解决了问题,我可以继续我的工作 - 非常感谢!
    • 如果您不喜欢 toast 消息。只需执行以下 2 个步骤: 1. 启动时禁用输出微调器 2. 当用户选择输入微调器时 -> 启用输出微调器
    【解决方案2】:

    我建议你使用OnItemSelectedListener

    然后创建一个 globalVariable 以将 String 获取到您的第一个 Spinner,如下所示:

    String FirstValue = "";
    

    那么你需要调用它:

    spinnerLengthInput.setOnItemSelectedListener(this);
    spinnerLengthOutput.setOnItemSelectedListener(this);
    

    当然你需要implements OnItemSelectedListener

    然后你可以在里面做你正在做的事情。

     @Override
    public void onItemSelected(AdapterView<?> spinner, View view, int position,long id)
    {
         FirstValue = spinner.getItemAtPosition(position).toString();
            checkIfConvertingFromMeter(itemSelectedInSpinnerLengthInput);
    }
    

    然后在您的其他 Spinner 中使用 FirstValue 值。

    【讨论】:

    • 我未能重新提出您的建议 - 我想我只是不够“流利”,不知道该怎么做。向您询问一个正在制作的 mainActivity 示例是否太过分了?
    • 没关系,同时我必须运行它,它可以工作。谢谢你的建议! :)
    猜你喜欢
    • 2018-02-26
    • 2021-12-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多