2010-08-19 60 views
7

java.lang.RuntimeException是「不要爲一個AdapterView調用setOnClickListener,你可能需要setOnItemClickListener」,但這是不正確的。我正在使用setOnItemClickListener來根據新選擇做一些事情,但我還需要在用戶更改選擇之前做一些事情。特別是,我正在收集每個選擇的數據,這些數據在移動到另一個選擇之前需要保存到文件中,因爲其他選擇與不同的數據集相關聯。有沒有辦法使用setOnClickListener和Android Spinner?有沒有辦法將setOnClickListener與Android Spinner一起使用?

spinner.setOnClickListener(new View.OnClickListener() { 
    public void onClick(View v) { 
     // Do some stuff before the user changes the selection 
     ... 

spinner.setOnItemSelectedListener(new OnItemSelectedListener() { 
    @Override 
    public void onItemSelected(AdapterView<?> parent, 
      View view, int pos, long id) { 
      // Do some stuff based onItemSelected 
      ... 
+2

新的(工作)解決方案可以在這裏找到:http://stackoverflow.com/a/8520801/406090 – OferR 2011-12-15 13:32:04

回答

5

您必須在微調器的基礎視圖(通常是帶有id:android.R.id.text1的TextView)上設置Click偵聽器。要做到這一點:

  • 創建自定義微調
  • 在構造函數(帶屬性)通過提供佈局android.R.layout.simple_spinner_item
  • 做一個findViewById(android.R.id創建微調.text1)得到的TextView
  • 現在設置onClickListener到TextView的
+0

所以onclicklistener會在自定義微調器內定義?我還應該在活動中定義spinner上的onclicklistener? – Namratha 2013-04-16 08:08:33

+0

我嘗試了你提出的方法 - 點擊已註冊,但下拉菜單仍然有效。如何防止下拉菜單工作,因爲點擊微調框後,我將進入另一個屏幕。 – Namratha 2013-04-16 08:22:07

+0

我用android:clickable =「false」 – Namratha 2013-04-16 09:05:24

7

可以使用ontouch事件

複製一個onclick事件
this.spinner=(Spinner)findViewById(R.id.spinner); 
    this.spinner.setClickable(false); 
    this.spinner.setOnTouchListener(new View.OnTouchListener() { 

     @Override 
     public boolean onTouch(View v, MotionEvent event) { 
      Log.v(TAG, "spinner touch"); 

      //replicating a click 
      if(event.getAction() == MotionEvent.ACTION_UP){ 
       v.playSoundEffect(android.view.SoundEffectConstants.CLICK); 
      } 
      return true; 
     } 
    }); 
+0

+1爲新理想 – kemdo 2014-10-22 04:20:38

+1

@ dcart1234你必須返回false否則微調不會打開彈出。 – Praveen 2015-07-27 12:18:05

+0

你爲什麼要調用spinner.setClickable(false)? – programmer 2017-09-10 13:32:38

相關問題