2011-02-11 17 views
9

मेरे पास एक सूची दृश्य है जहां प्रत्येक पंक्ति में दो पंक्तियां हैं, जो पूरी पंक्ति को लेती हैं। मैंने अपनी ListActivity मेंListItemClick() पर सेट अप किया है, लेकिन जब मैं पंक्तियों में से किसी एक पर टैप करता हूं तब तक उन्हें निकाल दिया नहीं जाता है (जब तक मैं टैप करने की जगह वेबव्यू की सीमा से बाहर नहीं होता - लेकिन यह संभवतः व्यवहार नहीं होता है, उपयोगकर्ता अधिकतर होते हैं संभवतः वेबव्यू के अंदर छवि पर टैप करना चाहते हैं)।ListView ऑनक्लिक घटना के मुद्दों के अंदर एंड्रॉइड वेबव्यू

मैंने सेट फोकसबल (झूठा) और सेट फोकसबलइन टचमोड (झूठा) सेट करने का प्रयास किया है, लेकिन वे मदद नहीं करते हैं।

आदर्श रूप में यह फेसबुक के न्यूज़फ़ीड, जहां आप किसी के दीवार पोस्ट के प्रोफ़ाइल चित्र पर टैप कर सकते हैं की तरह वास्तव में काम करते हैं और जैसे कि आप (दीवार पद के लिए पाठ एफबीएस मामले में) पूरी पंक्ति उपयोग किया गया है यह कार्य करता है

उत्तर

21

किसी अन्य व्यक्ति को ऐसा कुछ करना चाहता है, तो मेरा समाधान पोस्ट करना:

मुझे ऑनक्चलिस्ट और ऑनफोकस काम नहीं कर रहा था, इसलिए मुझे ऑनटचलिस्टर का उपयोग करना पड़ा।

private class WebViewClickListener implements View.OnTouchListener { 
    private int position; 
    private ViewGroup vg; 
    private WebView wv; 

    public WebViewClickListener(WebView wv, ViewGroup vg, int position) { 
     this.vg = vg; 
     this.position = position; 
     this.wv = wv; 
    } 

    public boolean onTouch(View v, MotionEvent event) { 
     int action = event.getAction(); 

     switch (action) { 
      case MotionEvent.ACTION_CANCEL: 
       return true; 
      case MotionEvent.ACTION_UP: 
       sendClick(); 
       return true; 
     } 

     return false; 
    } 

    public void sendClick() { 
     ListView lv = (ListView) vg; 
     lv.performItemClick(wv, position, 0); 
    } 
} 

sendClick विधि क्या अपने विशिष्ट मामले में आवश्यक है करने के लिए अधिरोहित जा सकता है: मैं एक वर्ग कि reuseable है बढ़ाया। उपयोग मामला:

WebView image = (WebView) findViewById(R.id.myImage); 
image.setOnTouchListener(new WebViewClickListener(image, parent, position)); 
+0

मैंने कोशिश की। यह मेरे लिए काम नहीं किया। किसी भी अन्य विचार के लिए धन्यवाद। – Raj

+0

यह इस तरह काम करता है! धन्यवाद!। आप इसे सेट के साथ उपयोग कर सकते हैं और कुछ वास्तविक जीवन मामलों में टैग प्राप्त कर सकते हैं। – superUser

2

मैं सिर्फ क्या इस पोस्ट WebView inside the Custom ListView: Click Listener is not Working में सुझाव दिया है की कोशिश की, मुझे पता नहीं क्यों, लेकिन यदि आप एक्सएमएल में इन सुविधाओं की स्थापना की है कि वे काम करने के लिए नहीं है। इस गतिशील रूप से करने से आपको सूचीदृश्य आइटम पर क्लिक करने के लिए =)

+2

वर्तमान में इस लिंक के लिए 404 प्राप्त हो रहा है। – treejanitor

7

मैं इस निम्नलिखित के साथ काम कर पाने में कामयाब रहे अनुमति नहीं है:

class NoClickWebView extends WebView { 
    public NoClickWebView(Context context) { 
     super(context); 
     setClickable(false); 
     setLongClickable(false); 
     setFocusable(false); 
     setFocusableInTouchMode(false); 
    } 
} 

आप इस वर्ग का उपयोग कर सकते है या सिर्फ एक मानक WebView पर इन गुणों की स्थापना की।

+0

बहुत बढ़िया! धन्यवाद। यह मेरे लिए सही काम किया। –

+1

4.4 पर काम नहीं करता है:/ – Aviel

1

मैं ListView में निम्न लेआउट का उपयोग कर रहा था और यह पूरी तरह से काम कर रहा था, यानी इसकी क्लिकिंग, स्क्रॉलिंग आदि।

TextView1 
ImageView1 TextView2 ImageView2 
TextView3 

तब मैं लेआउट निम्नलिखित के साथ जगह में ImageView1

TextView1 
WebView TextView2 ImageView2 
TextView3 

की बदल दिया है, यानी मैं चला गया सबसे कोने में WebView नियंत्रण के साथ जोड़ लिया है यह करने के बाद, क्लिक करके मेरे लिए काम नहीं कर रहा था।

android:descendantFocusability="blocksDescendants" 
android:layout_width="match_parent" 
android:layout_height="wrap_content" 
3

सेटअप प्रत्येक WebView की मूल लेआउट के लिए:

मैं वेब-दृश्य को यह जोड़कर इस समस्या का समाधान लेकिन प्रेषण टचवेन्ट

public class NonClickableWebview extends WebView { 
    public NonClickableWebview(Context context, AttributeSet attrs) { 
     super(context, attrs); 
     setClickable(false); 
     setLongClickable(false); 
     setFocusable(false); 
     setFocusableInTouchMode(false); 
    } 
    @Override 
    public boolean dispatchTouchEvent(MotionEvent ev) { 
     return false; 
    } 
} 
5

Android 4.4 में काम कर ऊपर bjdodson रूप में एक ही दृष्टिकोण का उपयोग मिल गया:

webView.setFocusable(false); 
webView.setClickable(false); 
+0

धन्यवाद। यह उपरोक्त सभी समाधानों की कोशिश करने के बाद मेरे लिए काम किया। – Raj

+2

यह समाधान अच्छी तरह से काम करता है, जबकि अन्य काफी काम करते थे। ध्यान दें कि "आधुनिक" एंड्रॉइड स्टूडियो-आईएसएच तकनीकों में, इसे पूरा करने का सबसे आसान तरीका इस कोड के साथ एक नई कक्षा फ़ाइल जोड़ना है, अपनी एक्सएमएल लेआउट फ़ाइल में नियमित 'वेब व्यू' बनाएं, फिर एक्सएमएल को संपादित करें, 'वेब व्यू' को बदल दें 'com.myapp.NonClickableWebview' के साथ, आपका कोड '(NonClickableWebview) myView = (NonClickableWebview) findViewById (R.id.myView) जैसा कुछ है; लेकिन आप अन्यथा इसे मानक' वेब व्यू 'के रूप में संबोधित कर सकते हैं –

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