簡體   English   中英

setOnItemClickListener不適用於Android Spinner

[英]setOnItemClickListener doesn't work with Android Spinner

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);

                }
            });

setOnItemClickListener不能與android spinner一起使用。或者,嘗試使用此方法:

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

            }
        });

1.我認為你應該檢查包含微調器的xml文件。 確保沒有設置android:clickable = "false"

2.請檢查您的微調器適配器並確保在您的getView(int position, View convertView, ViewGroup parent)方法中,您還沒有設置任何小部件單擊回調事件,如ButtonImageviewTextView

OnItemSelectedListener()與單擊偵聽器的用途不同。 最重要的是,如果再次單擊當前選定的項目,則不會觸發。 在某些情況下,這可能不是問題,但在其他情況下,它可能是。 所以真正的答案不是告訴人們使用不同的,可能不合適的聽眾,而是要解決原來的問題。 :-)

幸運的是,我們可以將click偵聽器放在適配器上:

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);

我可能會偏離OnItemSelectedListener ,但是建議你使用OnItemSelectedListener ,它比OnItemClickListener更廣泛的Spinners:

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
    }
});

使用getItemAtPosition:

supplier.getItemAtPosition(position).toString();

用這個

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

        }
    });

我認為代碼中的supplier意味着spinner ,請更換此行

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

以下行:

 String msupplier= supplier.getItemAtPosition(position).toString(); 

我遇到過這個問題。 setOnItemClickListener不適用於微調器。 我的解決方案如下:

mSpinnerYears.setAdapter(adapter);
    mSpinnerYears.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
        @Override
        public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
            Logger.d(new StringBuilder(2).append("TAG:").append(TAG).toString(),
                    new StringBuilder(3).append("click pos = ").append(position).append(
                            mSpinnerYears.getItemAtPosition(position).toString()).toString());
        }

        @Override
        public void onNothingSelected(AdapterView<?> parent) {

        }
    });

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM