我刚刚在一周前学习了android studio,因此,如果我不太了解,我很抱歉。
我正在写一个有趣的应用程序,名为" Sell-A-Planet"。 (不是我承诺的学校作业!)
我的想法是创建一个包含行星列表(地球,火星,木星)的简单微调器,然后每当用户选择不同的行星时,总价格就会更新。
不幸的是,我已经遇到了微调器的问题。无论如何,这是我的代码:
activity_main.xml中
<Spinner
android:id="@+id/planets_spinner"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
的strings.xml
<resources>
<string name="app_name">Spinner Practice</string>
<string-array name="planets_array">
<item> Mercury ($100 billion)</item>
<item> Venus ($200 billion)</item>
<item> Mars ($300 billion)</item>
</string-array>
</resources>
然后我从android开发者和另一个网站上读到,我必须创建这样的新java类:
spinnerList.java
public class spinnerActivity implements OnItemSelectedListener {
public void onItemSelected(AdapterView<?> parent, View view, int pos, long id) {
"OnItemSelectedListener : " + parent.getItemAtPosition(pos).toString(),
Toast.LENGTH_SHORT).show();
}
public void onNothingSelected(AdapterView<?> parent) {
// Another interface callback
}
}
MainActivity.java
public void addListenerOnSpinnerItemSelection() {
Spinner spinnerPlanet = (Spinner) findViewById(R.id.planets_spinner);
spinnerPlanet.setOnItemSelectedListener(new spinnerActivity ());
}
在这个阶段,我试图通过使用toast打印所选值来测试微调器是否有效。然而,每当我改变地球时,它都不会显示任何东西。
任何人都可以告诉我为什么这些不起作用?
此外,是否也可能(稍后)不同的星球将动态显示不同的总价格?
谢谢!
答案 0 :(得分:2)
你应该按照以下方法填充一个微调器。首先在Xml中创建微调器
<Spinner
android:id="@+id/spinnerplanet"
android:layout_width="match_parent"
android:layout_height="58dp"
style="@style/spinner_style"
android:spinnerMode="dropdown"/>
然后在你的MainActivity中,你应该通过它的id调用微调器,然后为它创建一个适配器。
spinnerplanetshow= (Spinner) findViewById(R.id.spinnerplanet);
adapterModule = new ArrayAdapter<String(getApplicationContext(), R.layout.spinner_item, your Array);
spinnerplanetshow.setAdapter(adapterModule);
现在你的行星名称数组将被填充到spinner中。用价格随意填充另一个数组,然后你需要使用OnItemSelected Listener,它将根据选定的行星来改变价格。
spinnerplanetshow.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parent, View view,
int position, long id) {
if (position == 0) {
System.out.println("position is 0");
//Set the string you want to show on click of first position in spinner.
} else if (position == 1) {
System.out.println("position is 1");
Toast.maketext(getApplicationContext,"position is 1",LENGTH.LONG).show();
//Set the string you want to show on click of second position in spinner.
这是您实现理想结果的方式。 }
答案 1 :(得分:1)
完整的工作演示
MainActivity
public class MainActivity extends AppCompatActivity {
private Context context;
Spinner spinner;
private TextView mTextView;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
context = this;
List<String> categories = new ArrayList<String>();
categories.add("A");
categories.add("B");
categories.add("C");
categories.add("D");
mTextView = (TextView) findViewById(R.id.textView2);
mTextView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(MainActivity.this, "your selected id is " + spinner.getSelectedItemId(), Toast.LENGTH_LONG).show();
}
});
spinner = (Spinner) findViewById(R.id.spinner);
ArrayAdapter<String> dataAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, categories);
dataAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
spinner.setAdapter(dataAdapter);
spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
Toast.makeText(MainActivity.this, "you selected " + spinner.getSelectedItem(), Toast.LENGTH_LONG).show();
}
@Override
public void onNothingSelected(AdapterView<?> parent) {
Toast.makeText(MainActivity.this, "Nothing selected", Toast.LENGTH_LONG).show();
}
});
}
}
<强> activity_main 强>
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/base"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/white"
android:orientation="horizontal">
<TextView
android:id="@+id/textView2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true"
android:layout_margin="10dp"
android:text="Click to get selected item"
android:textSize="20dp" />
<Spinner
android:id="@+id/spinner"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/textView2"
android:layout_centerHorizontal="true" />
</RelativeLayout>