2014-10-26 76 views
0

我需要添加使用上下文菜單或對話框編輯微調的項目,應該會出現在用戶長按某個項目微調setOnItemLongClickListener不起作用

this question我已經看到有人試圖能力使用

spinner.setOnItemLongClickListener(new OnItemLongClickListener() { 

      public boolean onItemLongClick(AdapterView<?> parent, View view, int arg2, long arg3) { 

       view.showContextMenu(); 
       return true; 

      } 
     }); 

但這種方法是行不通的。

我填充微調與

ArrayAdapter<String> adapter=new ArrayAdapter<String>(this, R.layout.my_spinner_item_layout, itemList); spinner.setAdapter(adapter); 

我簡單地已經提出了另一個問題,已經看到以避免嘗試實施了Spinner上下文菜單,但我沒有太多的空間,所以我不能使用沒有醜陋的結果,並且此操作僅用於罕見情況,所以上下文菜單或類似的東西似乎是唯一有效的選擇。

我該如何實現Spinner的上下文菜單或擴展Android微調以支持長時間點擊Spinner內的項目?

+0

嘗試交叉檢查你的「微調ID」 /如果你有嵌套視圖,則對佈局禁用重點對微調 – 2014-10-26 21:39:53

+0

得到事件我有一個顯示字符串數組的Spinner(沒有自定義的Spinner實現),我不明白你的意思。你能給我更多的細節嗎? – AndreaF 2014-10-26 21:42:59

+0

你可以請你添加你的代碼調試..我們不能幫你,直到我們可以看到你的執行... – 2014-10-26 21:52:49

回答

0

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); 
    }