2010-04-28 27 views
7

का उपयोग कैसे कर सकता हूं जब उपयोगकर्ता लंबे समय तक किसी आइटम पर क्लिक करता है तो मैं स्पिनर को अलग तरीके से व्यवहार करने की कोशिश कर रहा हूं। मेरे पास कुछ परियोजनाओं के साथ स्पिनर है और मुझे दो चीजें चाहिए।मैं स्पिनर setOnItemLongClickListener

  1. जब उपयोगकर्ता किसी आइटम पर सरल क्लिक करता है तो मैं इसे सामान्य चुनना चाहता हूं।
  2. जब उपयोगकर्ता ने किसी आइटम पर लंबे समय से क्लिक किया है, तो मैं "आइटम संपादित करें", "आइटम हटाएं" जैसे विकल्पों के साथ संवाद दिखाना चाहता हूं।

पहला कदम अच्छी तरह से काम करता है, लेकिन जब मैं दूसरा कार्य करने की कोशिश कर रहा हूं, तो मैं लंबे समय तक चलने वाली घटना उत्पन्न करने के लिए स्पिनर नहीं बना सकता।

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

8

हालांकि आप स्पिनर को ऑनऑनक्लिक लिस्टनर जोड़ सकते हैं। मेनू पर किसी आइटम पर लंबे समय तक क्लिक होने पर इसे निकाल दिया नहीं जाएगा, लेकिन जब उपयोगकर्ता लंबे समय तक स्पिनर पर क्लिक करेगा तो उसे निकाल दिया जाएगा।

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) एडाप्टर instantiating, वहीं पारित 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 स्थिति" पैरामीटर जोड़ा है कि कौन सा आइटम लंबे समय तक क्लिक किया गया है। –

0

बस हैंडलर के साथ एक touchlistener का उपयोग करें। चयनित आइटम हो रही spinner.getSelectedItemPosition

संबंधित मुद्दे