获取微调器选定项目并传递数据

Posted

技术标签:

【中文标题】获取微调器选定项目并传递数据【英文标题】:Get spinner selected item and passing data 【发布时间】:2021-12-04 20:30:21 【问题描述】:

我想要做的是设置文本取决于用户选择的微调器项目。但是运行应用程序时没有任何显示,也没有错误。我是否错过了导致结果没有出来的任何步骤?我还是安卓新手。

更新:

我忘了说我有三个不同的微调器,这取决于用户在第一个活动中喜欢哪个按钮,所以我认为这是因为我只声明了微调器的项目,但没有声明哪个微调器是“日本”指的。

所以这是我的第一个活动的代码,我只会把一个放在第一位:

btnAsia.setOnClickListener(new View.OnClickListener() 
        @Override
        public void onClick(View v) 
            Intent intent = new Intent(getApplicationContext(),MainActivity2.class);
            intent.putExtra("continent", "asia");
            startActivity(intent);
        
    );

这是strings.xml中的字符串数组:

<string-array name="asia">
    <item>Japan</item>
    <item>Thailand</item>
    <item>Vietnam</item>
    <item>South Korea</item>
</string-array>

这是第二个活动中的代码:

private void DestinationSpinner()

    Bundle bundle=getIntent().getExtras();
    if(bundle!=null) 
        String continent = bundle.getString("continent");
        switch (continent) 
            case "asia":
                ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(MainActivity2.this, R.array.asia, android.R.layout.simple_spinner_item);  // Create an ArrayAdapter using the string array and a default spinner layout
                adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); // Specify the layout to use when the list of choices appears
                spinnerDestination.setAdapter(adapter); // Apply the adapter to the spinner
                break;  

最后这是从微调器中检索所选项目的代码:

public void AvailableAirlines()

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

            if (continent.equals("asia") && selected.equals("Japan"))
            
                availableAirlines.setText("Available airports");
            
        

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

        
    );

而且我还想将 keyidentifer 从第一个活动传递到第二个活动,但我尝试使用 getExtras 并且它不起作用,也许我做错了或什么。

【问题讨论】:

【参考方案1】:

我认为问题出在这一行if(selected=="Japan")

在 Java 中,您需要使用 equals 而不是 == 运算符。

== 检查两个指针​​是否指向同一个内存位置。 Equals 会比较他们的内容。

【讨论】:

if(selected.equals("Japan")) 也是这样吗?我刚才试过改了,还是不行。 你调试过,看看onItemSelected中selected的值是多少? 你能再回顾一下我刚刚更新的问题吗?谢谢sss 我的问题仍然是当那个监听器被调用时selected 的值是多少?如果它仍然不起作用,可能是因为该值不是您所期望的......例如它可以在 UI 上显示日本,但 getItemAtPosition(position).toString() 可能是值的类型(例如 String等)而不是“日本”【参考方案2】:

假设您的Spinner 被命名为spinnerDestination,并且它包含以下选项之一:“日本”。

要查找和比较“日本”在 Spinner 中的位置,请使用:

String compareValue = "Japan";
ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(this, R.array.asia, android.R.layout.simple_spinner_item);
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
spinnerDestination.setAdapter(adapter);
if (compareValue != null) 
    int spinnerPosition = adapter.getPosition(compareValue);
    spinnerDestination.setSelection(spinnerPosition);

【讨论】:

以上是关于获取微调器选定项目并传递数据的主要内容,如果未能解决你的问题,请参考以下文章

获取微调器选定项目文本?

获取微调器选定项目文本?

当我使用 if else 然后将值传递给设置 onClick 时,如何获取微调器值?

以编程方式设置微调器的选定项

对话框中的 OnItemSelectedListener

将微调器值从片段传递到活动