Spinner在API 23中不使用onItemSelected方法

时间:2017-08-25 12:56:17

标签: java android spinner

我使用以下代码,我尝试在我的应用中实现微调器:

import java.util.List;
import java.util.ArrayList;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemSelectedListener;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Spinner;
import android.widget.TextView;
import android.widget.Toast;



public class MainActivity extends Activity {

  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    setContentView(R.layout.activity_main);

    //region UI declaration
    Button HelloWorldbtn = (Button) findViewById(R.id.btn1);
    Button ClientVersionbtn  = (Button) findViewById(R.id.btn2);
    Button VerifyUserID = (Button) findViewById(R.id.btn3);
    Spinner spn = (Spinner) findViewById(R.id.spinner);
    final TextView spnSelection = (TextView) findViewById(R.id.LocationText);
    //endregion

    //region Spinner creation
    List<String> spinnerArray =  StartSpinner();
    final ArrayAdapter<String> adapter = new ArrayAdapter<>(this, R.layout.support_simple_spinner_dropdown_item, spinnerArray);
    spn.setAdapter(adapter);

    spn.setOnItemSelectedListener(new OnItemSelectedListener() {
        @Override
        public void onItemSelected(AdapterView<?> parent, View view, int pos, long id){
            Object item = parent.getItemAtPosition(pos);
            spnSelection.setText(item.toString());
        }
        public void onNothingSelected(AdapterView<?> parent){

        }
    });
    //endregion

    HelloWorldbtn.setOnClickListener(new View.OnClickListener() {
        public void onClick(View v) {
            onHelloWorld(v);
        }
    });

    ClientVersionbtn.setOnClickListener(new View.OnClickListener(){
        public void onClick(View v) {
            onClientVersion(v);
        }
    });

    VerifyUserID.setOnClickListener(new View.OnClickListener(){
        public void onClick(View v) {
            onVerifyUser(v);
        }
    });

  }
}

代码编译并运行。但是,当我从微调器中选择一个项目时,它不会运行onItemSelected方法。我使用了调试器, logcat 中没有出现错误,也没有抛出任何异常。我尝试过自定义适配器和自定义onItemSelected侦听器,但我仍然遇到同样的问题。我目前的想法是,这可能是API 23的一个问题,但我还没能确认。

我也对使用微调器的任何替代方法持开放态度,因为它似乎不是维护或实现最简单的小部件。我希望将来能够维护它的人尽可能简单。

提前致谢!

2 个答案:

答案 0 :(得分:1)

您没有为适配器设置下拉视图。

您的实施应该是这样的。

List<String> spinnerArray =  StartSpinner();
final ArrayAdapter<String> adapter = new ArrayAdapter<>(this, android.R.layout.simple_spinner_item, spinnerArray);
spn.setAdapter(adapter );
spn.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
spn.setOnItemSelectedListener(new OnItemSelectedListener() {
    @Override
    public void onItemSelected(AdapterView<?> parent, View view, int pos, long id){
        Object item = parent.getItemAtPosition(pos);
        spnSelection.setText(item.toString());
    }
    public void onNothingSelected(AdapterView<?> parent){

    }
});

希望有所帮助:)

答案 1 :(得分:0)

可能是因为你没有将 dropdownView 附加到微调器上。

   final ArrayAdapter<String> = new ArrayAdapter<>(this, R.layout.support_simple_spinner_dropdown_item, spinnerArray);
   adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
   spn.setAdapter(adapter);

尝试上面的代码。
干杯!