2014-10-26 92 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); 
    }