2012-09-07 18 views
12

के स्वाइप को रोकने वाले चाइल्ड पर ऑनक्लिक लिस्टनर मैं इस link में दिखाए गए डायनामिक व्यू के साथ व्यूपेजर का उपयोग कर रहा हूं। मैं प्रत्येक पेज को व्यूपर में जोड़ रहा हूं। कोड इस प्रकार है के रूप मेंएंड्रॉइड व्यूपेजर

private View.OnClickListener onAppClick=new View.OnClickListener() { 
    public void onClick(View v) { 
     // TODO Auto-generated method stub 
     String gettext = (String)v.getTag(); 
     String[] splittext = gettext.split(":"); 

     Log.d("TAG","Click Event is Triggered"); 
    } 
}; 
समस्या का सामना करना पड़ रहा हूँ

के रूप में पेज में TextView के लिए

public View createPage() 
{ 
TableLayout table = new TableLayout(mycontext); 
TableRow row = new TableRow(mycontext); 

for(int i=0; i <= num_of_views; i++) 
{ 

     TableLayout catTable = new TableLayout(mycontext); 

     TableLayout.LayoutParams params = new TableLayout.LayoutParams(); 

     params.height = LayoutParams.MATCH_PARENT; 

     TableRow catName = new TableRow(mycontext); 
     catName.setGravity(0x03); 
     catName.setLayoutParams(params); 

     TextView cat = new TextView(mycontext); 
     TableRow.LayoutParams RowParams= 
      new TableRow.LayoutParams(pixeltoDp(0),pixeltoDp(85)); 
     RowParams.weight = 1; 
     cat.setLayoutParams(RowParams); 
     cat.setPadding(35, 0, 5, 0); 
     cat.setGravity(0x13); 
     cat.setSingleLine(true); 
     cat.setHorizontallyScrolling(true); 
     cat.setFocusable(true); 
     cat.setFocusableInTouchMode(true); 
     cat.setLines(1); 
     cat.setText(data.getCats().get(i).getName()); 
     cat.setTextColor(color); 
     cat.setSelected(true); 

     catName.addView(cat); 
     catTable.addView(catName); 
     for(int j=0; j < 5; j++) 
     { 
      TableRow trChild = new TableRow(mycontext); 
      trChild.setLayoutParams(params); 
      trChild.setGravity(0x11); 
      for (int k=0; k<4; k++) 
      { 
       TextView app = new TextView(mycontext); 
       TableRow.LayoutParams tableRowParams= 
        new  TableRow.LayoutParams(pixeltoDp(0),pixeltoDp(80)); 
       margin = pixeltoDp(11); 

       tableRowParams.weight = 1; 
       app.setLayoutParams(tableRowParams); 

       app.setGravity(0x11); 
       app.setSingleLine(true); 
       app.setTextSize(pixeltoDp(12)); 
       app.setTextColor(Color.BLACK); 
       app.setTypeface(verdana); 


       int pos = j+(k*5); 
       if((pos < mysize)) 
       { 
         Drawable icon = getMyDrawable(); 

         app.setCompoundDrawablesWithIntrinsicBounds(null, icon, null, null); 
         app.setText("some Name"); 
         app.setTag(i+":"+pos); 
         app.setEllipsize(TextUtils.TruncateAt.END); 
         app.setOnClickListener(onMyClick); 

       } 

       trChild.addView(app); 
      } 
      catTable.addView(trChild);    
     } 
     TableRow.LayoutParams tableRowParams= 
       new TableRow.LayoutParams 
        (TableRow.LayoutParams.MATCH_PARENT,TableRow.LayoutParams.WRAP_CONTENT); 
     margin = pixeltoDp(5); 
     tableRowParams.setMargins(margin,0,margin, pixeltoDp(18)); 
     catTable.setLayoutParams(tableRowParams);  
}   
row.setGravity(0x03); 
table.addView(row);  
return table;   
} 

OnClickListener इस प्रकार प्रत्येक पृष्ठ बना सकते हैं और पेजर एडाप्टर के लिए है इसे जोड़ने के लिए है कि viewpager है स्लाइड्स जब मैं स्क्रीन पर स्वाइप करता हूं लेकिन अगर मेरी अंगुली ऑनक्लिकलिस्टर के साथ टेक्स्ट से स्वाइप शुरू करती है तो पृष्ठ स्लाइड नहीं करता है, क्लिक ईवेंट भी नहीं कहा जाता है। यदि मैं टेक्स्ट व्यू पर क्लिक करता हूं तो क्लिक इवेंट कहा जाता है। मैं यह समझने में सक्षम नहीं हूं कि दर्शक ईवेंट को फ़्लिप करने में क्यों नहीं आ रहा है अगर स्वाइप क्लिक ईवेंट से टेक्स्ट व्यू से शुरू होता है।

बग के कारण का पता लगाने के लिए मैंने व्यूपैज़र में एक ऑनचचलिस्टर जोड़ा और पाया कि दृश्यपटल की स्पर्श घटना को तब कहा जाता है जब पृष्ठ के उस हिस्से पर स्वाइप होता है जहां कोई टेक्स्ट व्यू और स्पर्श ईवेंट नहीं होता है अगर स्वाइप टेक्स्ट व्यू के शीर्ष पर शुरू होता है तो बिल्कुल नहीं कहा जाता है। यदि मैं टेक्स्टव्यू के ऑनक्लिकलिस्टर को हटा देता हूं तो संपूर्ण व्यूपायर बिना किसी समस्या के ठीक से फ़्लिप करता है। तो समस्या यह है कि टेक्स्टव्यू की क्लिक इवेंट व्यूपर की स्पर्श घटनाओं को रोक रही है। कृपया मुझे बताएं कि क्या मैं अपने निर्माण पृष्ठ कोड में कुछ गलत कर रहा हूं। इस फ़ंक्शन में जो दृश्य मैं बना रहा हूं उसे पेजपैप्टर के माध्यम से व्यूपार्जर में जोड़ा गया है जैसा कि मैंने शुरुआत में उल्लिखित ट्यूटोरियल में दिखाया था।

उत्तर

22

अंत में मैंने पाया कि व्यूपेजर के नवीनतम संस्करण में एक बग है जहां एक क्लिक ईवेंट के साथ टेक्स्टव्यू, सिंगललाइन सेट के रूप में सत्य और गुरुत्वाकर्षण सेट के रूप में सेट है, अगर उंगली शुरू हो जाती है तो व्यूपेजर को टच इवेंट पास नहीं कर रहा है टेक्स्टव्यू के शीर्ष पर। यदि हम सिंगललाइन को झूठी बनाते हैं या केंद्र गुरुत्वाकर्षण को हटाते हैं तो ईवेंट व्यूपेजर को पास कर दिए जाते हैं, फिर यह फ़्लिंग कर सकता है। हम टेक्स्टव्यू के लिए केंद्र गुरुत्वाकर्षण और सेटिंगलाइन (सत्य) दोनों का उपयोग नहीं कर सकते हैं या सिनलगलाइन सेट वाले बटन को सत्य के रूप में उपयोग नहीं कर सकते हैं। मैं एक बग here

के रूप में इसकी सूचना दी है देखें 'एक पंक्ति लागू' यहाँ स्रोत: https://github.com/android/platform_frameworks_base/blob/7bfb1e7f46d2ed3df6cc467bccec95b5999d9cc4/core/java/android/widget/TextView.java#L7877

+0

इस पर शोध करने और पोस्ट करने के लिए बहुत बहुत धन्यवाद, मैंने सोचा कि मैं थोड़ी देर के लिए पागल हो रहा था ... – avalancha

+0

धन्यवाद !!! मैं पूरे दिन इसका कारण खोज रहा था ... –

+0

सिंगललाइन = "सत्य" बहिष्कृत है। maxLine = "1" का उपयोग करें –

4

ऐसा लगता है एक समाधान के लिए कुछ हद तक है कि वहाँ: आप setSingleLine() के बजाय setMaxLines(1) उपयोग कर सकते हैं और यह आई के बिना काम करेंगे प्रणाली। हालांकि मैं आपके previous answer की पुष्टि कर सकता हूं जिसमें आप कहते हैं कि यह bug

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