我很难理解如何编写微调器的代码。我看过这个网站上的很多项目和其他人,但不明白为什么它必须如此复杂,有些解决方案甚至涉及创建一个类。我想要做的就是,当用户从微调器下拉列表中选择一个项目时,需要识别哪个项目,然后代码会触发新的活动或方法或其他一些操作。 网站I-Programmer似乎提供了一个相对简单的解决方案,我按照编码说明写了字母,但它不起作用。我写信给他们但他们还没有回复。 他们的代码现在如下,但我不明白它是如何工作的,因为在它之前似乎没有AdapterView块和实际的微调器之间的链接。它不按原样编译。当我添加一些分号和大括号时,它会编译但仍然无效。 有人可以帮我解决一下吗?
package com.example.owner.spinners;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.Spinner;
public class MainActivity extends AppCompatActivity
{
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
String[] country = {"Canada", "Mexico", "USA"};
ArrayAdapter<String> stringArrayAdapter=
new ArrayAdapter<String>(this,
android.R.layout.simple_spinner_dropdown_item,
country);
Spinner spinner=
(Spinner)findViewById(R.id.spinner);
spinner.setAdapter(stringArrayAdapter);
}
AdapterView.OnItemSelectedListener onSpinner=
new AdapterView.OnItemSelectedListener(){ // Error 1 here
AdapterView.OnItemSelectedListener onSpinner =
new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(
AdapterView<?> parent,
View view,
int position,
long id) { // Does my 'if' code go here?
}
@Override
public void onNothingSelected(
AdapterView<?> parent) { // and here?
}
} // Error 2 here. ; expected
} // Error 3 here. ; expected
@Override
public boolean onCreateOptionsMenu(Menu menu)
{
...
}
错误1读取,Class'从OnItemSelectedListener派生的匿名类'必须被声明为abstract或在'OnItemSelectedListener'中实现抽象方法'onNothingSelected(AdapterView)'我恐怕不会遵循这一切。我真的试过了。 提前谢谢。
答案 0 :(得分:0)
首先,为什么会出现编译错误:
错误1 - 因为您尝试在此处创建变量,但您无法做到这一点。在这个地方你可以使用现有的变量/字段或创建一个简单的匿名类。
错误2 - 编译器预期;
,因为您已完成代码部分,因此必须以;
结束。
错误3 - 与错误2中的情况相同。
所以,我稍微改进了你的代码并添加了一些评论。我希望现在代码对你来说更容易理解。
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// create a adapter
String[] country = {"Canada", "Mexico", "USA"};
ArrayAdapter<String> stringArrayAdapter = new ArrayAdapter(this, android.R.layout.simple_spinner_dropdown_item, country);
// create a spinner
Spinner spinner = (Spinner) findViewById(R.id.spinner);
// add adapter to spinner
spinner.setAdapter(stringArrayAdapter);
// create listener and add to spinner
spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
// put code which recognize a selected element
}
@Override
public void onNothingSelected(AdapterView<?> parent) {
}
});
}