2013-06-13 6 views
6

मैं ऐसी गतिविधि को प्रोग्राम करने का प्रयास कर रहा हूं जो कुछ छवियों के साथ व्यूअरज़र दिखाता है और कुछ डेटा के साथ नीचे सूचीदृश्य .. लेकिन मेरी समस्या यह है कि मैं केवल अंतिम भाग पर सूचीदृश्य स्क्रॉल कर सकता हूं स्क्रीन मैं viewpager सूचीदृश्य साथ स्क्रॉल करने योग्य बनाना चाहते थे तो मैं शीर्ष लेख के रूप में यह लगाने के बारे में सोचा था .. यहाँ मेरी एक्सएमएल फ़ाइलसूची में शीर्षलेख के रूप में Viewpager जोड़ना

<TableLayout xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:tools="http://schemas.android.com/tools" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
tools:context=".MainActivity" > 

<com.devsmart.android.ui.HorizontalListView 
    android:id="@+id/sectionsList" 
    android:layout_width="wrap_content" 
    android:layout_height="25dp" 
    android:background="@drawable/menu_bg" /> 

<include layout="@layout/main_screen_components" /> 

<ListView 
    android:id="@+id/list" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" /> 

है और मैं मेरी कक्षा में यह लिख

@Override 
    protected void onPostExecute(List<News> result) { 
     Utils.pagerNews(result); 
     Utils.listNews(result); 

     ImagePagerAdapter pAdapter = new ImagePagerAdapter(
       appManager.getPagerNews()); 
     pager.setAdapter(pAdapter); 

     View headerView = getLayoutInflater().inflate(R.layout.main_screen_components , null , false); 

     NewsListAdapter adapter = new NewsListAdapter(getBaseContext(), 
       appManager.getListNews()); 
     listView.addHeaderView(headerView); 
     listView.setAdapter(adapter); 
     progress.dismiss(); 
    } 

जब मैं इस कोड को चलाता हूं तो यह मुझे एक डुप्लिकेट पेजर देता है .. डेटा के साथ एक निश्चित और एक मेरी एक सूची के शीर्षलेख के रूप में एक खाली .. जब मैं हटा देता हूं जिसमें मेरे पेजर को क्रैश होता है जब मैं पेजर पर एडाप्टर सेट करने का प्रयास करता हूं .. कोई उपाय ?

उत्तर

20

सिर्फ viewPager के onTouchListener निर्धारित करते हैं, इस तरह:

viewPager.setOnTouchListener(new OnTouchListener() { 
    @Override 
    public boolean onTouch(View v, MotionEvent event) { 
    PointF downP = new PointF(); 
    PointF curP = new PointF(); 
    int act = event.getAction(); 
    if(act == MotionEvent.ACTION_DOWN || act == MotionEvent.ACTION_MOVE || act == MotionEvent.ACTION_UP){ 
     ((ViewGroup) v).requestDisallowInterceptTouchEvent(true); 
     if (downP.x == curP.x && downP.y == curP.y) { 
     return false; 
     } 
    } 
    return false; 
    } 
+0

आप मेरा दिन बचाया! यह आकर्षण की तरह काम करता है। – Antonio

+0

आपने मेरा दिन भी बचाया! यह अद्भुत काम करता है ~ – daimajia

+0

@eric मुझे इस फ़ंक्शन को समझने में समस्या का सामना करना पड़ रहा है। यह कार्य कम कार्रवाई का झूठा झूठा मानता है। और डॉप और क्यूआरपी अभी शुरू हो गए हैं लेकिन उनके मूल्यों में कोई बदलाव नहीं है जिसका अर्थ है एक्स, वाई ऑफ द डॉप और क्यूपी 0 और हमेशा बराबर हैं। –

0

उपयोग नीचे कस्टम viewpager वर्ग:

public class CustomViewPager extends ViewPager { 
boolean xScored = false, yScored = false; 

public CustomViewPager(Context context) { 
    super(context); 
} 

public CustomViewPager(Context context, AttributeSet attrs) { 
    super(context, attrs); 
} 

@Override 
public boolean onTouchEvent(MotionEvent ev) { 
    mGestureDetector.onTouchEvent(ev); 
    if (ev.getAction() == MotionEvent.ACTION_UP || ev.getAction() == MotionEvent.ACTION_CANCEL) { 
     xScored = false; 
     yScored = false; 
     requestDisallowInterceptTouchEvent(false); 
    } 
    return super.onTouchEvent(ev); 
} 

GestureDetector.SimpleOnGestureListener mOnGestureListener = new GestureDetector.SimpleOnGestureListener() { 
    @Override 
    public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) { 
     if (!yScored && Math.abs(distanceX) > Math.abs(distanceY)) { 
      xScored = true; 
      yScored = false; 
     } 
     if (xScored) { 
      requestDisallowInterceptTouchEvent(true); 
     } else if (!xScored && Math.abs(distanceY) > Math.abs(distanceX)) { 
      xScored = false; 
      yScored = true; 
      requestDisallowInterceptTouchEvent(false); 
     } 
     return true; 
    } 

}; 
GestureDetector mGestureDetector = new GestureDetector(getContext(), mOnGestureListener); 
} 
संबंधित मुद्दे