android studio中的微调器使用

Posted

技术标签:

【中文标题】android studio中的微调器使用【英文标题】:spinner usage in android studio 【发布时间】:2021-10-05 09:29:16 【问题描述】:

我正在制作应用程序,人们可以在其中选择瓶子大小和名称。然后用户按下购买按钮,程序会查看瓶子分配器中是否有任何类型的瓶子,如果是真的,则购买瓶子。这是微调器代码:(所有内容都在 onCreate 除了@override -> 等等)

sizeSpinner = (Spinner) findViewById(R.id.spinner);
    nameSpinner = (Spinner) findViewById(R.id.spinner2);

ArrayAdapter<CharSequence> arrayAdapter = ArrayAdapter.createFromResource(this, R.array.sizes, android.R.layout.simple_spinner_item);
    arrayAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
    sizeSpinner.setAdapter(arrayAdapter);
    sizeSpinner.setOnItemSelectedListener(this);

    ArrayAdapter<CharSequence> arrayAdapterName = ArrayAdapter.createFromResource(this, R.array.bottleNames, android.R.layout.simple_spinner_item);
    arrayAdapterName.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
    nameSpinner.setAdapter(arrayAdapterName);
    nameSpinner.setOnItemSelectedListener(this);


@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) 
    switch (parent.getId()) 
        case R.id.spinner2:
            selectedName = parent.getItemAtPosition(position).toString();
            break;
        case R.id.spinner:
            selectedSize = parent.getItemAtPosition(position).toString();
            break;
    


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


这是我的 string.xml:

<resources>
<string name="app_name">kappa8</string>
<string-array name = "sizes">
    <item>small</item>
    <item>medium</item>
    <item>large</item>
</string-array>

<string-array name = "bottleNames">
    <item>Pepsi Max</item>
    <item>Coca-Cola Zero</item>
    <item>Fanta Zero</item>
</string-array>

然后按下按钮调用 buyBottle 函数,该函数调用bottleDispenser (bd) 中的另一个buyBottle 函数

    public void buyBottle(View v) 
    if (bd.buyBottle(selectedSize, selectedName))
        bottleTextRefresh();
        displayText.setText("Bought a bottle");
      else 
        displayText.setText("Not enough MONEY or no such bottle found");
    


分瓶器中的buyBottle功能:

    public boolean buyBottle(String size, String name) 
    Double sizee = 0.0;
    int indexOfBottle = -1;
    String trimSize = size.trim();
    System.out.println(size + " before if statements");
    System.out.println("small" == trimSize);
       if (trimSize == "large") 
        sizee = 1.5;
        System.out.println("This is big bottle");
    
    if (trimSize == "medium") 
        sizee = 1.0;
    
    if (trimSize == "small") 
        sizee = 0.5;System.out.println("This is small bottle");
    
    System.out.println(sizee + " after if statement");
    for (Bottle bottle : bottle_array) 
        if ((bottle.getName() == name.toString()) && (bottle.getSize() == sizee)) 
            indexOfBottle = bottle_array.indexOf(bottle);
            System.out.println("bottle found");
        
    
    if (indexOfBottle != -1) 
        if (money < bottle_array.get(indexOfBottle).getCost()) 
            System.out.println("Add money first!");
            return false;
         else 
            bottles -= 1;
            money -= Math.round(bottle_array.get(indexOfBottle).getCost() * 100.0) / 100.0;
            System.out.println("KACHUNK! " + bottle_array.get(indexOfBottle).getName() + " came out of the dispenser!");
            bottle_array.remove(indexOfBottle);
            return true;
        
     else 
        System.out.println("missing bottle");
        return false;
    

用户只能在 3 种尺寸之间进行选择,这就是我为每种尺寸都做了 if 语句的原因。问题发生在 bd buyBottle 中,因为它不会从初始值更改 sizee (Double) 值。我不知道为什么,但它不会将字符串或名称重新转换为普通字符串或名称。例如,我从旋转器中选择了小芬达瓶,但系统输出是这样的:

I/System.out: small before if statements
I/System.out: false
    0.0 after if statement
    missing bottle

当我做“小”== trimSize 部分时,它甚至说是假的。为什么会这样,主要是如何解决这个问题?我不太确定问题出在哪里,所以这就是我发布一堆代码的原因。

【问题讨论】:

使用 trimSize.equals("xxx") 不要使用 == 来比较字符串,如this post中的答案所述 【参考方案1】:

您需要使用 .equals() 函数来比较字符串。像 if("medium".equals(trimSize))

【讨论】:

以上是关于android studio中的微调器使用的主要内容,如果未能解决你的问题,请参考以下文章

如何在我的微调器中使用 getItemAtPosition 从谷歌地图中的火力基地使用 android studio

带Spinner的Android Studio对话框[关闭]

Spin ner OnItemSelected在Android Studio中不起作用[关闭]

没有AlertDialog的android中的多选微调器

Android微调器中的重复项目

如何将项目添加到 Android 中的微调器?