【问题标题】:I have an error: setOnItemClickListener cannot be used with a spinner, what is wrong?我有一个错误:setOnItemClickListener 不能与微调器一起使用,出了什么问题?
【发布时间】:2012-07-04 04:58:23
【问题描述】:

以下是我的代码,我在下面粘贴错误消息: 我想在微调器上使用setOnItemClickListener,是否允许?

@Override
public void onItemClick(AdapterView<?> arg0, View v, int index, long arg3) {
    if (quantity[index]=="Meter" ){
        s1="Meter";
        Toast.makeText(v.getContext(), "convert from meter",Toast.LENGTH_SHORT).show();
    } 
}

   });

convertto.setOnItemClickListener(new OnItemClickListener()
{
    @Override
    public void onItemClick(AdapterView<?> arg, View v1, int index1, long arg4)
    {
        if ((quantity[index1]=="Meter") && (s1.equalsIgnoreCase("Meter")))
        {
            Toast.makeText(v1.getContext(), " to meter",Toast.LENGTH_SHORT).show();
            var2=var1;
            lresult.setText("" + var2);
        }
    }      
});

}

}

这里是错误

FATAL EXCEPTION: main
07-04 09:48:39.912: E/AndroidRuntime(694): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.a2zunitconverter.miniproject/com.a2zunitconverter.miniproject.lenght}: java.lang.RuntimeException: setOnItemClickListener cannot be used with a spinner.
07-04 09:48:39.912: E/AndroidRuntime(694):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1647)
07-04 09:48:39.912: E/AndroidRuntime(694):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1663)
07-04 09:48:39.912: E/AndroidRuntime(694):  at android.app.ActivityThread.access$1500(ActivityThread.java:117)
07-04 09:48:39.912: E/AndroidRuntime(694):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:931)
07-04 09:48:39.912: E/AndroidRuntime(694):  at android.os.Handler.dispatchMessage(Handler.java:99)
07-04 09:48:39.912: E/AndroidRuntime(694):  at android.os.Looper.loop(Looper.java:123)
07-04 09:48:39.912: E/AndroidRuntime(694):  at android.app.ActivityThread.main(ActivityThread.java:3683)
07-04 09:48:39.912: E/AndroidRuntime(694):  at java.lang.reflect.Method.invokeNative(Native Method)
07-04 09:48:39.912: E/AndroidRuntime(694):  at java.lang.reflect.Method.invoke(Method.java:507)
07-04 09:48:39.912: E/AndroidRuntime(694):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
07-04 09:48:39.912: E/AndroidRuntime(694):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
07-04 09:48:39.912: E/AndroidRuntime(694):  at dalvik.system.NativeStart.main(Native Method)
07-04 09:48:39.912: E/AndroidRuntime(694): Caused by: java.lang.RuntimeException: setOnItemClickListener cannot be used with a spinner.
07-04 09:48:39.912: E/AndroidRuntime(694):  at android.widget.Spinner.setOnItemClickListener(Spinner.java:102)
07-04 09:48:39.912: E/AndroidRuntime(694):  at com.a2zunitconverter.miniproject.lenght.onCreate(lenght.java:31)
07-04 09:48:39.912: E/AndroidRuntime(694):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
07-04 09:48:39.912: E/AndroidRuntime(694):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1611)
07-04 09:48:39.912: E/AndroidRuntime(694):  ... 11 more

【问题讨论】:

  • setOnItemClickListener 不能与微调器一起使用
  • 当您将 listView.setOnItemClicklistener 复制到 Spinner 时会发生这种情况,微调器会按照您的意图对其进行处理,很奇怪

标签: java android android-spinner


【解决方案1】:

查看你的 logcat 的第一行:

java.lang.RuntimeException: setOnItemClickListener cannot be used with a spinner.

setOnItemClickListener 不能与Spinner 一起使用。请改用setOnItemSelectedListener

【讨论】:

【解决方案2】:

正如@Alex 所说,你必须使用

spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
        @Override
        public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {

        }

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

        }
    });

或者如果您使用的是 ButterKnife:

@OnItemSelected(R.id.spinner)
public void onSpinnerItemSelected(int index){
    // ...
}

【讨论】:

    【解决方案3】:

    科特林:

    spinner.onItemSelectedListener = object : AdapterView.OnItemSelectedListener {
        override fun onItemSelected(parent: AdapterView<*>, view: View, position: Int, id: Long) {
            print("onItemSelected position = $position id = $id")
        }
    
        override fun onNothingSelected(parent: AdapterView<*>) {
    
        }
    }
    

    我写它是因为从接口内联创建对象不同。

    【讨论】:

      【解决方案4】:

      只需将您的实现形式 setOnItemClickListener 更改为 setOnItemSelectedListener。之后您的代码应该可以正常工作而不会出错。

      Java:

      convertto.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
              @Override
              public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
      
              }
      
              @Override
              public void onNothingSelected(AdapterView<?> parent) {
      
              }
          });
      

      科特林:

      convertto.onItemSelectedListener = object : AdapterView.OnItemSelectedListener {
      
          override fun onItemSelected(parent: AdapterView<*>, view: View, position: Int, id: Long) {
      
          }
      
          override fun onNothingSelected(parent: AdapterView<*>) {
      
        }
      }
      

      【讨论】:

        【解决方案5】:

        改变这个

         convertto.setOnItemClickListener(new OnItemClickListener()
           {
        
            @Override
            public void onItemClick(AdapterView<?> arg, View v1, int index1, long arg4)
            {
                 if ((quantity[index1]=="Meter") && (s1.equalsIgnoreCase("Meter")))
                {
        
                Toast.makeText(v1.getContext(), " to meter",Toast.LENGTH_SHORT).show();
                var2=var1;
                lresult.setText("" + var2);
                }
        
            }
        
           });
        

        到onItemSelectedListener,

         convertto.setOnItemSelectedListener(new OnItemSelectedListener() {
        
            public void onItemSelected(AdapterView<?> arg0, View arg1, int arg2,
                    long arg3) {
                 if ((quantity[index1]=="Meter") && (s1.equalsIgnoreCase("Meter")))
                {
        
                Toast.makeText(v1.getContext(), " to meter",Toast.LENGTH_SHORT).show();
                var2=var1;
                lresult.setText("" + var2);
                }
        
        
            }
        
            public void onNothingSelected(AdapterView<?> arg0) {
                // TODO Auto-generated method stub
        
            }
        });
        

        看来您不能在 Spinner 中使用 itemClickListener,

        这是解释它的错误行,

        07-04 09:48:39.912: E/AndroidRuntime(694): Caused by: java.lang.RuntimeException: setOnItemClickListener cannot be used with a spinner.
        

        【讨论】:

          【解决方案6】:

          已解决

           spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
                  @Override
                  public void onItemSelected(AdapterView<?> adapterView, View view, int  
           i, long l) {
          
                  }
          
                  @Override
                  public void onNothingSelected(AdapterView<?> adapterView) {
          
                  }
              });
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2011-10-03
            相关资源
            最近更新 更多