2015-05-31 21 views
9

मैं से नव Android Design Support Library की घोषणा की एक CoordinatorLayout को लागू करने का प्रयास कर रहा हूँ काम नहीं कर रहा है और मैं नमूना here के अनुसार मेरी एक्सएमएल लेआउट में निम्न कोड का इस्तेमाल किया है:CoordinatorLayout

<android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:app="http://schemas.android.com/apk/res-auto" 
android:id="@+id/main_content" 
android:layout_width="match_parent" 
android:layout_height="match_parent"> 

<android.support.design.widget.AppBarLayout 
    android:id="@+id/appbar" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"> 

    <android.support.v7.widget.Toolbar 
     android:id="@+id/toolbar" 
     android:layout_width="match_parent" 
     android:layout_height="?attr/actionBarSize" 
     android:background="?attr/colorPrimary" 
     app:popupTheme="@style/ThemeOverlay.AppCompat.Light" 
     app:layout_scrollFlags="scroll|enterAlways"/> 

    <android.support.design.widget.TabLayout 
     android:id="@+id/tabs" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content"/> 

</android.support.design.widget.AppBarLayout> 

<android.support.v4.view.ViewPager 
    android:id="@+id/viewpager" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    app:layout_behavior="@string/appbar_scrolling_view_behavior" /> 

हालांकि कार्रवाई बार जब मैं दृश्य को स्क्रॉल करता हूं तो छुपा नहीं जाता है। मैं यह नहीं समझ सकता कि यह क्यों काम नहीं कर रहा है।

संपादित करें: जहां तक ​​मेरा जानकारी है ऐसा लगता है कि CoordinatorLayoutListView/GridView/ScrollViews साथ काम नहीं करता है और केवल RecyclerView और NestedScrollView साथ काम करता है। दुर्भाग्य से बस इन विचारों में से किसी एक पर स्विच करना मेरे लिए एक संभावना नहीं है इसलिए मैं अभी भी समाधान ढूंढ रहा हूं।

+0

आप ListView/GridView और CoordinatorLayout API21 + के साथ उपयोग कर सकते हैं। –

उत्तर

4

मैं तुम्हें अपने ListView लागू दोनों ScrollingView और NestedScrollingChild इंटरफेस बनाने की जरूरत का मानना ​​है ओवरराइड है।

यह सबसे आसान बात नहीं है, लेकिन यदि आप RecyclerView के स्रोत कोड को देखते हैं तो आपको ऐसा करने में सक्षम होना चाहिए। यह NestedScrollingChildHelper का उपयोग करता है और आपको ऐसा करने में सक्षम होना चाहिए।

+2

यह आपके ListView में NestedScrollingChild इंटरफ़ेस को लागू करने के लिए नहीं है। जाँच करें: http://stackoverflow.com/questions/30696611/design-lib-coordinatorlayout-collapsingtoolbarlayout-with-gridview-listview/30885092#30885092 –

0

यह आपके ViewPager में जो दिखा रहा है उस पर निर्भर करता है। यदि आप किसी सूची/पुनर्चक्रण का उपयोग करते हैं, तो इसे सही तरीके से स्क्रॉल करना चाहिए।

+0

मैं ViewPager के भीतर कई विचारों का उपयोग कर रहा हूं, जिनमें से एक सूची दृश्य है। मैंने बिना किसी अंतर के केवल एक सूची दृश्य का उपयोग करने का प्रयास किया था। – dnlbaines

+0

मैं इसे 'रीसाइक्लर व्यू' के साथ आज़मा दूंगा, और नवीनतम समर्थन लाइब्रेरी का उपयोग कर रहा हूं: 'compile' com.android.support: recyclerview-v7: 22.2.0''।टुकड़े में केवल पुनर्नवीनीकरण होना चाहिए, इसे किसी अन्य लेआउट में लपेटें। – aows

+0

मेरा ऐप एक सूची दृश्य में लेखों की एक सूची लोड कर रहा है लेकिन दो अन्य विचारों का उपयोग करता है, एक प्रगति स्पिनर दिखाने के लिए और कोई अन्य लेख लोड होने पर कुछ पाठ दिखाने के लिए - मैं इसे केवल एक RecyclerView के साथ कैसे कर पाऊंगा? – dnlbaines

0

दृश्य CoordinatorLayout.DefaultBehavior (YourView.Behavior.class) एनोटेशन का उपयोग करके एक डिफ़ॉल्ट व्यवहार घोषणा कर सकते हैं, या एप्लिकेशन द्वारा अपने लेआउट फाइलों में यह सेट: layout_behavior = "com.example.app.YourView $ व्यवहार "विशेषता। यह ढांचा CoordinatorLayout के साथ एकीकृत करने के लिए किसी भी दृश्य के लिए संभव बनाता है।

तो मुझे लगता है यहाँ समाधान AppBarLayout.Behavior वर्ग

5

Currenlty सभी विचारों को CoordinatorLayout के साथ अपेक्षित व्यवहार नहीं है।

आपके विचारों को NestedScrollView इंटरफ़ेस को लागू करना चाहिए और नेस्टेड स्क्रॉल ईवेंट को संभालना होगा।

RecyclerView और NestedScrollView (संस्करण 22) इस व्यवहार का समर्थन करते हैं। हालांकि आप AbsListView (ListView और GridView) का उपयोग कर सकते हैं, लेकिन केवल API21 + के साथ।

बस कुछ इस तरह जोड़ें:

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { 
    listView.setNestedScrollingEnabled(true); 
} 
+1

धन्यवाद! आपने मेरा दिन बना दिया। –

-1

यह मेरे लिए काम है।

यह ग्रिड व्यू के लिए कोड है। लेकिन आप GridView के बजाय ListView का विस्तार कर सकते हैं।

https://gist.github.com/sakurabird/6868765

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