setOnItemClickListener doesn't work with Android Spinner

前端 未结 8 890
说谎
说谎 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: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);
    

提交回复
热议问题