2015-06-13 8 views
7

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

मैं कुछ here in this discussion दिया समाधान की कोशिश की लेकिन उनमें से कोई भी काम कर लगता है, दो SwipeToRefresh लेने का विचार ठीक काम करता है के रूप में दिया Here, लेकिन यह खाली कंटेनर सर्वर से डेटा प्राप्त करने में भी जब पता चलता है।

मैं अपने खुद के तर्क रैपिंग सूची दृश्य और TextView एक रिश्तेदार/FrameLayout अंदर के साथ यह कोशिश की, लेकिन SwipeToRefresh केवल के रूप में अपने व्यवहार के प्रति

यहाँ एक xml टुकड़ा मैं

<android.support.v4.widget.SwipeRefreshLayout 
     android:id="@+id/activity_main_swipe_refresh_layout" 
     android:layout_width="match_parent" 
     android:layout_height="0dp" 
     android:layout_weight="0.945" > 


     <RelativeLayout 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" > 

      <ListView 
       android:id="@+id/event_list_eventlist" 
       android:layout_width="match_parent" 
       android:layout_height="match_parent" 
       android:divider="@color/event_background" 
       android:dividerHeight="1dp" > 
      </ListView> 

      <TextView 
       android:id="@+id/event_txt_nothing_found" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:layout_centerHorizontal="true" 
       android:layout_centerInParent="true" 
       android:layout_centerVertical="true" 
       android:textAppearance="?android:attr/textAppearanceMedium" 
       android:textColor="@android:color/darker_gray" 
       android:visibility="gone" /> 
     </RelativeLayout> 
    </android.support.v4.widget.SwipeRefreshLayout> 

की कोशिश की है है एक दृश्य को स्वीकार करता है कृपया मदद

उत्तर

11

मैं FrameLayout उपयोग करके एक ही समस्या हल हो, नीचे दिए गए कोड को देखो:

<FrameLayout 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"> 

    <android.support.v4.widget.SwipeRefreshLayout 
     android:id="@+id/layout_swipe_refresh" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content"> 

     <ListView 
      android:id="@+id/lv_products" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:divider="@null" /> 

    </android.support.v4.widget.SwipeRefreshLayout> 

    <TextView 
     android:id="@+id/tv_no_product" 
     style="@android:style/TextAppearance.Medium" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:layout_gravity="center" 
     android:layout_margin="10dp" 
     android:gravity="center" 
     android:text="@string/msg_no_listing" 
     android:textColor="@color/primary_green" 
     android:visibility="gone" /> 
</FrameLayout> 

आप रिलेवेटिवआउट का भी उपयोग कर सकते हैं, लेकिन कुंजी आपकी सूची दृश्य को SwipeRefreshLayout के अंदर रख रही है, और टेक्स्टव्यू बाहर है।

+0

और गतिविधि में क्या करना है? मेरा मतलब है, अगर सूची खाली है तो क्या यह कार्यान्वयन फिर से स्वाइप करने की अनुमति देता है? –

+1

निश्चित रूप से, यदि सूची खाली है तो आप फिर से स्वाइप कर सकते हैं। मुझे यकीन है कि यह 100% काम करता है। –

+0

यदि आप संभव हो तो गतिविधि के लिए कृपया थोड़ा कोड डाल सकते हैं? –

12

मुझे यह समस्या भी थी, और को गतिविधि में किसी अतिरिक्त कोड के बिना नीचे दिए गए लेआउट का उपयोग करके हल किया गया।

यदि आप ListActivity या ListFragment का उपयोग कर रहे हैं तो यह आपके लिए खाली दृश्य दिखा रहा है/छुपा रहा है, और इस लेआउट संरचना के साथ खाली सूची के साथ ताज़ा काम करता है।

कोई हैक की आवश्यकता नहीं है, सबकुछ SwipeRefreshLayout में होना चाहिए, जैसा कि होना चाहिए।

<?xml version="1.0" encoding="utf-8"?> 
<android.support.v4.widget.SwipeRefreshLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/Refresher" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"> 
    <LinearLayout 
     android:orientation="vertical" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent"> 
     <ListView 
      android:id="@android:id/list" 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" 
      android:divider="@null" /> 
     <ScrollView 
      android:id="@android:id/empty" 
      android:layout_width="match_parent" 
      android:layout_height="match_parent"> 
      <TextView 
       android:text="Geen formulieren gevonden" 
       style="@style/text.EmptyView" /> 
     </ScrollView> 
    </LinearLayout> 
</android.support.v4.widget.SwipeRefreshLayout> 

आशा है कि इससे किसी को भी इस मुद्दे से जूझने में मदद मिलेगी।

+0

धन्यवाद, नुकसान की तरह काम करता है! – mklimek

+0

कोई दोस्त मेरे दोस्त को नुकसान नहीं पहुंचा :) – HendraWD

+0

बढ़िया, यह ठीक काम करता है। मैं सोच रहा हूँ क्यों? क्या इसके लिए कोई स्पष्टीकरण है? – GVillani82

0

अंत में निम्नलिखित कोड

<android.support.v4.widget.SwipeRefreshLayout 
     android:id="@+id/swipe_container" 
     android:layout_below="@+id/search_product" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent"> 

     <LinearLayout 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" 
      android:orientation="vertical"> 

      <android.support.v7.widget.RecyclerView 
       android:id="@+id/recycler_shop_list" 
       android:layout_width="match_parent" 
       android:layout_height="wrap_content" /> 

      <ScrollView 
       android:gravity="center" 
       android:fillViewport="true" 
       android:layout_width="match_parent" 
       android:layout_height="match_parent"> 

       <com.forysta.inloyal.view.textviews.RegularTextView 
        android:id="@+id/tv_no_shop_data" 
        style="@style/text_Size_16" 
        android:layout_width="match_parent" 
        android:layout_height="match_parent" 
        android:gravity="center" 
        android:text="@string/alert_nodatashop" 
        android:visibility="visible" 
        app:layout_collapseMode="parallax" /> 
      </ScrollView> 
     </LinearLayout> 
    </android.support.v4.widget.SwipeRefreshLayout> 
0

मेरे मुद्दा लगता है undocumented जा करने के लिए का उपयोग कर इस मुद्दे को हल है, लेकिन आप setLayoutManager समारोह कहा जाता है, तो recycler दृश्य बन जाता है, तो एक recycler देखने के लिए एडाप्टर कोई डाटा नहीं है, और अन-स्वाइप करने योग्य। मेरा समाधान कुछ डेटा प्राप्त होने के बाद केवल setLayoutManager पर कॉल करना था।

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