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对话框[关闭]