我正在尝试使用Spinner创建一个下拉列表,但是很长时间都遇到了问题。我也过了Good Developers Spinners here也是一个很好的例子。但我有一个问题,无法解决它。 我的main_activity.java
package com.example.dropdown;
import android.os.Bundle;
import android.app.Activity;
import android.widget.Button;
import android.widget.Spinner;
public class MainActivity extends Activity {
private Spinner spinner1, spinner2;
private Button button;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
addItemsOnSpinner2();
addListenerOnButton();
addListenerOnSpinnerItemSelection();
}
// add items into spinner dynamically
public void addItemsOnSpinner2() {
spinner2 = (Spinner)findViewById(R.id.spinner2);
}
private void addListenerOnButton() {
// TODO Auto-generated method stub
}
private void addListenerOnSpinnerItemSelection() {
// TODO Auto-generated method stub
}
}
my strings.xml:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="app_name">AndroidSpinner</string>
<string name="hello_world">Hello world!</string>
<string name="menu_settings">Settings</string>
<string name="select">Choose a country</string>
<string name="select2">Choose an item</string>
<string name="button_label">Submit</string>
<string-array name="country_array">
<item>Greece</item>
<item>United Kingdom</item>
<item>Italy</item>
<item>France</item>
<item>Germany</item>
<item>Turkey</item>
<item>Poland</item>
<item>India</item>
</string-array>
</resources>
和我的activity_main.xml(布局):
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<Spinner
android:id="@+id/spinner1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:entries="@array/country_array"
android:prompt="@string/select"/>
<Spinner
android:id="@+id/spinner2"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:prompt="@string/select2" />
<Button
android:id="@+id/button"
android:layout_width="227dp"
android:layout_height="wrap_content"
android:text="@string/button_label" />
</LinearLayout>
在这里,我是否在命名
时做错了什么android:id="@+id/spinner2"
因为我无法在我的主要活动课程中通过id找到它。它向我显示以下错误:
spinner2无法解析或不是字段
答案 0 :(得分:1)
同一视图中的两个微调器可能有点棘手,但它是可行的。由于我对android比较陌生,所以我有点不愿意发表回答,但在这里:
首先,我通常在活动中使用片段,但无论哪种方式,我相信你可以使用LayoutInfater类来扩充布局。您的活动中有类似的事情:
LayoutInflater inflater = this.getLayoutInflater();
View view = inflater.inflate(R.id.yourlayout, null);
将视图传递给您的spinnner方法:
getSpinner1(view);
getSpinner2(view);
现在是棘手的部分。您可以使用与此类似的详细信息调用上述方法:
public void getStateSpinner(View view) {
Spinner spinner = (Spinner) view.findViewById(R.id.YourSpinner1Id);
ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(
this, R.array.spinner1_array,
android.R.layout.simple_spinner_item);
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
spinner.setVisibility(0);
spinner.setAdapter(adapter);
spinner.setOnItemSelectedListener(new Spinner1OnItemSelectedListener());
}
public void getStateSpinner(View view) {
Spinner spinner = (Spinner) view.findViewById(R.id.YourSpinner2Id);
ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(
this, R.array.spinner2_array,
android.R.layout.simple_spinner_item);
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
spinner.setVisibility(0);
spinner.setAdapter(adapter);
spinner.setOnItemSelectedListener(new Spinner2OnItemSelectedListener());
}
然后我使用2个静态内部类来实现两次OnItemSelectedListener接口:
public static class Spinner1OnItemSelectedListener implements OnItemSelectedListener{
@Override
public void onItemSelected(AdapterView<?> parent, View view, int pos,
long id) {
// TODO Auto-generated method stub
spinner1Variable = parent.getItemAtPosition(pos).toString();
}
@Override
public void onNothingSelected(AdapterView<?> arg0) {
// TODO Auto-generated method stub
}
就是这样。
正如我所说,我使用了片段,所以你的实现会有所不同。由于您正在使用某个活动,因此我在使用getActivity()的几个地方替换了“this”。
我希望这足以让你朝着正确的方向前进。
小心,
道格
}
public static class Spinner2OnItemSelectedListener implements OnItemSelectedListener{
@Override
public void onItemSelected(AdapterView<?> parent, View view, int pos,
long id) {
// TODO Auto-generated method stub
spinner2Varialbe = parent.getItemAtPosition(pos).toString();
}
@Override
public void onNothingSelected(AdapterView<?> arg0) {
// TODO Auto-generated method stub
}
答案 1 :(得分:0)
我尝试了你的代码并且工作正常。我没有发现任何缺陷。 所以我建议你删除项目,再次下载并导入项目并检查它是否会导致问题呢?