无法让微调器在Android Studio中工作

时间:2015-12-20 15:32:03

标签: java android android-studio

我很难理解如何编写微调器的代码。我看过这个网站上的很多项目和其他人,但不明白为什么它必须如此复杂,有些解决方案甚至涉及创建一个类。我想要做的就是,当用户从微调器下拉列表中选择一个项目时,需要识别哪个项目,然后代码会触发新的活动或方法或其他一些操作。 网站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)'我恐怕不会遵循这一切。我真的试过了。 提前谢谢。

1 个答案:

答案 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) {

        }
    });
}