setOnItemClickListener doesn't work with Android Spinner

前端 未结 8 850
说谎
说谎 2020-12-17 17:37

setOnItemClickListener doesn\'t work with android Spinner. Here is my code:

supplier.setOnItemClickListener(new OnItemClickListener() {

                @Ove         


        
相关标签:
8条回答
  • 2020-12-17 18:09

    setOnItemClickListener will not work with android spinner.Alternatively, try using this method:

    setOnItemSelectedListener

    Change your code like this:

    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
    
                }
            });
    
    0 讨论(0)
  • 2020-12-17 18:09

    I may be going off course, but thought to suggest you to use OnItemSelectedListener which is broader than OnItemClickListener for 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
        }
    });
    
    0 讨论(0)
  • 2020-12-17 18:18

    1. I think you should check your xml file which contains the spinner. Make sure haven't set android:clickable = "false".

    2. please check your spinner adapter and make sure in your getView(int position, View convertView, ViewGroup parent) method, you haven't set any widget click callback event such as Button,Imageview,TextView

    0 讨论(0)
  • 2020-12-17 18:20

    Use this

    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
    
            }
        });
    
    0 讨论(0)
  • 2020-12-17 18:21

    OnItemSelectedListener() serves a different purpose than a click listener. Most importantly, it doesn't fire if you click on the currently selected item again. In some cases this might not be a problem but in other cases, it might well be. So the real answer is not to tell people to use a different and probably unsuitable listener but to solve the original problem. :-)

    Fortunately, we can place the click listener on the adapter instead:

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

    and then we can use it as usual, with the only difference of not setting it on the spinner but on the adapter instead:

    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);
    
    0 讨论(0)
  • 2020-12-17 18:25

    Use getItemAtPosition:

    supplier.getItemAtPosition(position).toString();
    
    0 讨论(0)
提交回复
热议问题