1

これは私がスピナーを定義する方法です

s_province = (Spinner) findViewById(R.id.s_province);
        ArrayAdapter<String> provinceAdapter = new ArrayAdapter<String>(this,
                android.R.layout.simple_spinner_item, Data.provinces);
        provinceAdapter
                .setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
        s_province.setAdapter(provinceAdapter);
        s_province.setOnItemSelectedListener(this);

私のクラスはfromOnItemSelectedListenerを実装し、このメソッドをオーバーライドします

@Override
    public void onItemSelected(AdapterView<?> arg0, View arg1, int arg2,
            long arg3) {
        // TODO Auto-generated method stub
        switch (arg1.getId()) {
        case R.id.s_province:
            Log.d("here", "there");
            break;

        default:
            break;
        }
    }

    @Override
    public void onNothingSelected(AdapterView<?> arg0) {
        // TODO Auto-generated method stub

    }

しかし、それonItemSelectはトリガーされていません、なぜお願いしますか?

4

1 に答える 1

2

2つのこと:

  1. メソッドが機能しているかどうかを実際に確認したい場合は、メソッドが呼び出されていることを確認できるように、またはケースLogの外にステートメントを配置します。switchdefault

  2. それは位置を表すarg2ので、使用する必要があります。渡されるビューではなく、位置を使用してスイッチを機能させます。また、Eclipseが割り当てるデフォルトの名前から変数の名前を変更します。あなたにとっても、あなたのコードを見ている他の人にとっても役に立ちません。arg0,1,2, etc

例えば

@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id){
  Toast.makeText(view.getContext(),"onItemSelected called", Toast.LENGTH_LONG).show();
  int spinnerId = parent.getId();
  if (spinnerId == R.id.s_province)
  {
    switch (position)
    {
      case 0: 
        //do something if first position was clicked
      break:
      case 1:
        //do something else
        break;
      default: 
        //if for any reason no position matches.
        break;
    }
  }
  else if (spinnerId == R.other_id_in_xml)
  {
    switch (position)
    {
      case 0: 
        //do something if first position was clicked
      break:
      case 1:
        //do something else
        break;
      default: 
        //if for any reason no position matches.
        break;
    }
  }
  //etc
}
于 2013-02-01T22:24:39.807 に答える