15

setOnItemClickListener は android Spinner では機能しません。これが私のコードです:

supplier.setOnItemClickListener(new OnItemClickListener() {

                @Override
                public void onItemClick(AdapterView<?> parent, View view, int position,
                        long id) {
                    // TODO Auto-generated method stub

                    String msupplier=supplier.getSelectedItem().toString();
                    Log.e("Selected item : ",msupplier);

                }
            });
4

8 に答える 8

51

setOnItemClickListener は android スピナーでは機能しません。代わりに、次の方法を試してください。

setOnItemSelectedListener

コードを次のように変更します。

supplier.setOnItemSelectedListener(new OnItemSelectedListener() {

            @Override
            public void onItemSelected(AdapterView<?> arg0, View arg1,
                    int arg2, long arg3) {
                // TODO Auto-generated method stub
                String msupplier=supplier.getSelectedItem().toString();

                Log.e("Selected item : ",msupplier);
}

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

            }
        });
于 2013-02-25T10:16:30.663 に答える
6

OnItemSelectedListener()クリック リスナーとは異なる目的を果たします。最も重要なことは、現在選択されているアイテムをもう一度クリックしても起動しないことです。これは問題にならない場合もありますが、問題になる場合もあります。したがって、本当の答えは、おそらく不適切な別のリスナーを使用するよう人々に指示するのではなく、元の問題を解決することです。:-)

幸いなことに、代わりにアダプターにクリック リスナーを配置できます。

public class SpinnerClickAdapter extends BaseAdapter implements SpinnerAdapter {
  protected OnItemClickListener listener;

  public SpinnerClickAdapter(Context context, ..., OnItemClickListener listener) {
    super();

    this.listener = listener;
  }

  @Override
  public View getDropDownView(final int position, View convertView, final ViewGroup parent) {
    if (convertView == null)
      convertView = LayoutInflater.from(context).inflate(R.layout.yourlayout, false);

    convertView.setOnClickListener(new View.OnClickListener() {
      @Override
      public void onClick(View v) {
        if (listener != null)
          listener.onItemClick((AdapterView<?>) parent, v, position, getItemId(position));
      }
    });


    // ...

    return convertView;
  }
}

その後、通常どおり使用できますが、唯一の違いは、スピナーではなくアダプターに設定することです。

Spinner spinner = (Spinner) findViewById(R.id.yourspinner);
SpinnerClickAdapter spinnerAdapter = new SpinnerClickAdapter(context, ..., new AdapterView.OnItemClickListener() {
  @Override
  public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
    // TODO
  }
});
spinner.setAdapter(spinnerAdapter);
于 2015-01-31T14:24:20.553 に答える
5

1.スピナーを含むxmlファイルを確認する必要があると思います。設定していないことを確認してくださいandroid:clickable = "false"

2.スピナー アダプターを確認し、メソッドでgetView(int position, View convertView, ViewGroup parent)、、、などのウィジェット クリック コールバック イベントを設定していないことを確認してください。ButtonImageviewTextView

于 2013-02-25T10:17:01.570 に答える
4

私はコースから外れているかもしれませんが、スピナーOnItemSelectedListenerよりも広いものを使用することをお勧めします。OnItemClickListener

supplier.setOnItemSelectedListener(new OnItemSelectedListener() {
    @Override
    public void onItemSelected(AdapterView<?> arg0, View arg1, int arg2,
        long arg3) {
        //do something here
    }
    @Override
    public void onNothingSelected(AdapterView<?> arg0) {
        //optionally do something here
    }
});
于 2013-02-25T10:15:13.803 に答える
1

getItemAtPosition を使用します。

supplier.getItemAtPosition(position).toString();
于 2013-02-25T10:14:28.437 に答える
1

これを使って

supplier.setOnItemSelectedListener(new OnItemSelectedListener() {

        @Override
        public void onItemSelected(AdapterView<?> arg0, View arg1,
                int arg2, long arg3) {
            // TODO Auto-generated method stub

        }

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

        }
    });
于 2013-02-25T10:15:34.113 に答える
0

supplierはあなたのコードで意味すると思いますspinner、この行を置き換えてください

 String msupplier=supplier.getSelectedItem().toString();

以下の行で:

 String msupplier= supplier.getItemAtPosition(position).toString(); 
于 2013-02-25T10:12:52.820 に答える