2010-04-28 101 views
7

我試圖讓長時間用戶點擊一個項目時,微調行爲不同的方式。我有一些項目微調,我想要兩件事情。我怎樣才能使用微調setOnItemLongClickListener

  1. 當用戶只需點擊一個項目我想正常選擇它。
  2. 當用戶長時間點擊一個我想要顯示對話框的項目時,可以使用諸如「編輯項目」,「刪除項目」等選項。

第一步運行良好(當然),但是當我嘗試執行第二個任務時,我無法讓微調器生成longClicked事件。

這裏是我的代碼:

this.projectSpinner = (Spinner) this.findViewById(R.id.SpinnerProjects); 
    this.projectSpinner.setLongClickable(true); 

    this.projectSpinner.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener(){ 
     public boolean onItemLongClick(AdapterView<?> arg0, 
             View arg1, 
             int arg2, 
             long arg3) { 
      Toast.makeText(
       AndroidTimeTrackerMainActivity.this, 
       "Long click", 
       Toast.LENGTH_SHORT).show(); // This toast doesn't show up. 
      return false; 
     } 

    }); 

回答

15

Spinner目前不支持OnItemLongClickListener

+0

這裏是[文檔鏈接](http://developer.android.com/reference/android/widget/Spinner.html#setOnItemClickListener%28android.widget.AdapterView.OnItemClickListener%29)。 – MaxChinni 2014-09-03 11:34:54

8

雖然您可以將OnLongClickListener添加到微調器。當菜單上的項目被長時間點擊時它不會被觸發,但當用戶長時間點擊微調器時它會被觸發。

this.projectSpinner.setOnLongClickListener(new OnLongClickListener() 
{ 
    @Override 
    public boolean onLongClick(View v) 
    { 
     System.out.println(chuteSpinner.getSelectedItem().toString() + " is long clicked"); 
     return true; 
    } 
}); 
1

1)通過延長微調創建一個自定義微調類,

public class CCSpinner extends Spinner { 
    public CCSpinner(Context context) { 
     super(context); 
    } 

    public CCSpinner(Context context, int mode) { 
     super(context, mode); 
    } 

    public CCSpinner(Context context, AttributeSet attrs) { 
     super(context, attrs); 
    } 

    public CCSpinner(Context context, AttributeSet attrs, int defStyleAttr) { 
     super(context, attrs, defStyleAttr); 
    } 

    public CCSpinner(Context context, AttributeSet attrs, int defStyleAttr, int mode) { 
     super(context, attrs, defStyleAttr, mode); 
    } 

    @Override 
    public void onDetachedFromWindow() { 
     super.onDetachedFromWindow(); 
    } 
} 

使用上述微調您的XML視圖。

2)定義的接口處理點擊,

public interface ClickListener { 
     void onItemLongClicked(View view); 
     void onItemClicked(View view); 
    } 

3)在您的微調適配器類做getView和getDropDownView

這些東西
@Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
     //ususal stuffs 
     convertView.setTag(R.string.click_tag, position); 
     convertView.setClickable(false); 
     convertView.setLongClickable(false); 



     return convertView; 
    } 


    @Override 
    public View getDropDownView(int position, View convertView, ViewGroup parent) { 
     //ususal stuffs 
     convertView.setTag(R.string.click_tag, position); 

     convertView.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       if (clickListener != null) { 
        clickListener.onItemClicked(v); 
       } 
      } 
     }); 


     convertView.setOnLongClickListener(new View.OnLongClickListener() { 
      @Override 
      public boolean onLongClick(View v) { 
       if (clickListener != null) { 
        clickListener.onItemLongClicked(v); 
       } 
       return true; 
      } 
     }); 

     return convertView; 
    } 

4)在實例化適配器,通過我們創建的ClcikListener接口。

5),並在實現類做到以下幾點,

@Override 
    public void onItemLongClicked(final View view) { 
     mPSpinner.onDetachedFromWindow(); 
     final int pos = (int) view.getTag(R.string.click); 
     mPSpinner.setSelection(pos); 
    } 


    @Override 
    public void onItemClicked(final View view) { 
     mPSpinner.onDetachedFromWindow(); 
     int pos = (int) view.getTag(R.string.click); 
     mPSpinner.setSelection(pos); 
    } 
+1

像魅力一樣工作。我向接口方法添加了一個「int position」參數,以確定哪個項目被長按。 – 2016-07-08 10:06:14

0

只需使用touchlistener與處置。獲取選定項目spinner.getSelectedItemPosition