【问题标题】:Android - Spinner + setOnClickListenerAndroid - Spinner + setOnClickListener
【发布时间】:2018-05-23 19:31:10
【问题描述】:

所以,我想分配一个 Spinner OnClick,但出现以下错误

     java.lang.RuntimeException: Don't call   setOnClickListener for an AdapterView. You probably want setOnItemClickListener instead

当我单击微调器时,我需要它来收集数据,然后再使用它。 我知道我以前做过,但我丢失了代码。谷歌搜索答案,我没有找到任何有效的方法。 如果这有帮助,我正在使用 pagerview 布局。 这是我的代码:

     public class DATA extends Fragment {
         public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {

        if (container == null) {
            return null;
        }

  ScrollView GPU_LAYOUT = (ScrollView)inflater.inflate(R.layout.gpu, container, false);

      final TextView higher_than =(TextView) GPU_LAYOUT.findViewById(R.id.gpu_higher_than_value);

        final Spinner min_max =(Spinner) GPU_LAYOUT.findViewById(R.id.min_max_spinner_gpulay);  

        min_max.setOnClickListener(new OnClickListener() {
            public void onClick(View v) {
                String TMP=min_max.getSelectedItem().toString();
                higher_than.setText(TMP);
            }
        });

       return GPU_LAYOUT;
      }

有什么办法可以做到吗?谢谢!

【问题讨论】:

    标签: java android spinner onclicklistener


    【解决方案1】:

    你可以用 setOnTouchListener 这样做:

    spinner.setOnTouchListener(new View.OnTouchListener() {
                @Override
                public boolean onTouch(View view, MotionEvent motionEvent) {
                    Toast.makeText(getBaseContext(), "CLICK", Toast.LENGTH_SHORT).show();
                    return false;
                }
            });
    

    【讨论】:

      【解决方案2】:

      我是这样做的:

      public void addListenerOnSpinnerItemSelection() {
              mySpinner = (Spinner) findViewById(R.id.GPU_LAYOUT);  
              mySpinner.setOnItemSelectedListener(new myOnItemSelectedListener());
          }
      
      public class myOnItemSelectedListener implements OnItemSelectedListener {       
      @Override
      public void onItemSelected(AdapterView<?> parent, View arg1, int pos,long arg3)     {           
      
      int position=Arrays.asList(getResources().getStringArray(R.array.GPU_LAYOUT)).indexOf(fecha);           }
      
      @Override
      public void onNothingSelected(AdapterView<?> arg0) {        }       
      }
      

      另外我建议获取你正在使用的组的位置,然后处理它。

      【讨论】:

      • “当我点击微调器时,我需要它来收集数据”。请阅读我的帖子!我不需要 OnItemSelectedListener。此外,GPU_LAYOUT 是主要的 ScrollView。
      • 也许你应该这样做: public static class CustomSpinner extends Spinner{ private OnSpinnerEventsListener mListener; @Override public boolean performClick() {mOpenInitiated = true; if (mListener != null) {//这里捕获你想要的数据 mListener.onSpinnerOpened();} return super.performClick();} public void setSpinnerEventsListener(OnSpinnerEventsListener OnSpinnerEventsListener) { mListener = onSpinnerEventsListener; } 公共无效 performClosedEvent() { mOpenInitiated = false; if (mListener != null) { mListener.onSpinnerClosed(); } } }
      【解决方案3】:
      min_max.setOnItemClickListener(new OnItemClickListener()
      {
          @Override
          public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,long arg3) {
      
          //whatever your logic is put it here 
       }
      }); 
      

      【讨论】:

      • 对不起,您误会了。当我按下微调器时,我需要使用 setOnClickListener 来收集一些数据,而不是当我从中选择一个项目时。
      • 好吧,这可能会帮助你stackoverflow.com/questions/18447063/…
      • 不,它没有帮助。谢谢!
      【解决方案4】:

      您不能直接在 Spinner 上使用setOnClickListener。如果你想这样做,这是一个技巧。

       @Override
      public boolean onTouch(View view, MotionEvent motionEvent) {
          switch (view.getId()) {
              case R.id.sp_category:
                  if (motionEvent.getAction() == MotionEvent.ACTION_UP)//replacing with onclick
                  {
                      //Perform any action
                  }
                  break;
          }
          return true;
      }
      

      在此代码中,MotionEvent.ACTION_UP 将使这种触摸行为类似于 onclick。 希望对你有帮助!

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-04-23
        • 1970-01-01
        • 2023-03-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多