2011-03-09 20 views
6

एक अभ्यास ऐप में से किसी एक विचार में, प्रोग्राम चयन प्रोग्रामेटिक रूप से करने की कोशिश कर रहा हूं।यह मोशनवेन्ट सिमुलेशन क्यों काम नहीं करता है?

मैं (प्रोग्रामेटिक रूप से) "टेक्स्ट चयन मोड" दर्ज करने में सक्षम हूं, जिसे दृश्य के ऊपरी-बाएं कोने पर कर्सर कंट्रोलर (एकेए हैंडल) द्वारा दृश्य रूप से इंगित किया गया है। "पाठ क्लिपबोर्ड में कॉपी":

मैं मैन्युअल खींचें सही CursorController, तो यह फिर से (एमुलेटर में) पर क्लिक करें है, तो वह (पूरी तरह से) की उम्मीद, एक संक्षिप्त संदेश दिखा काम करता है।

लेकिन जब मैं सही कर्सर नियंत्रक को प्रोग्रामेटिक रूप से खींचने की कोशिश करता हूं, कुछ भी नहीं होता है।

जिस तरह से मैं इसे करने का प्रयास करता हूं वह मोशनवेन्ट अनुकरण करके होता है। ध्यान में रखते हुए मैं फोन:

event = MotionEvent.obtain(downTime, eventTime, MotionEvent.ACTION_DOWN, x, y, 0); 
    MainActivity.onTouch(this, event); 

MainActivity मैं में निश्चित रूप से लागू OnTouchListener:

@Override 
public boolean onTouch(View v, MotionEvent event) { // called BEFORE button's onTouchEvent() 
    Log.v("MainActivity::onTouch()", describeEvent(v, event)); 
    switch (event.getAction()) { 
     case MotionEvent.ACTION_DOWN: 
     case MotionEvent.ACTION_UP: 
      if (!v.hasFocus()) { 
       v.requestFocus(); 
      } 
      break; 
    } 
    return false; 
} 

अगर मैं सही ढंग से समझ, मात्र लौटने 'असत्य' द्वारा onTouch से, एंड्रॉयड एक और की तलाश में रहता है यूआई ऑब्जेक्ट मोशनएवेंट ऑब्जेक्ट का उपभोग करने के लिए, अंत में मेरे दृश्य तक पहुंच गया।

ऐसा क्यों नहीं होता?

मैं बहुत ही मौलिक कुछ कमी किया जाना चाहिए ...

उत्तर

1

देखें एक काम कर समाधान की कमी के लिए, मैं केवल निष्कर्ष निकाल सकते हैं कि मैं क्या पूरा करने के लिए कोशिश कर रहे हैं, Android पर संभव नहीं है कारणों के लिए सुरक्षा का निम्नलिखित लिंक में एक स्पष्टीकरण पाया जा सकता है: How to send synthesized MotionEvent through the system?

0

OnTouchListener जो बारी में ViewGroup या एक TouchDelegate से बुलाया गया है dispatchTouchEvent से देखें अंदर कहा जाता है। यदि आप श्रोता को अपने विचार से बुलाते हैं तो यह आपके पास जो कुछ भी है, वह करता है और फिर लौटाता है। यह जादुई रूप से कहीं भी स्पर्श घटना का प्रतिनिधि नहीं है।

सही परिणाम प्राप्त करने के लिए अपने विचार पर dispatchTouchEvent() पर कॉल करें।

की इकाई के लिए पाठ चयन आदि पर अपने आवेदन व्यवहार परीक्षण http://developer.android.com/resources/tutorials/testing/activity_test.html

+0

इस कठिन प्रश्न का उत्तर देने के लिए पहले व्यक्ति होने के लिए कुडोस। दुर्भाग्यवश हालांकि, प्रेषण टचएवेंट() घटनाओं के लिए बहुत अधिक उत्पादन नहीं करता है। शायद @ डीजेसी निम्नलिखित प्रश्न के उत्तर में सही था: http://stackoverflow.com/questions/5240287/how-to-send-synthesized-motionevent-through-the- सिस्टम –

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