2016-02-09 12 views
6

में प्रगति दृश्य की तरह स्टाइल किया है, मैं अपने एंड्रॉइड ऐप में android.support.v4.widget.SwipeRefreshLayout का उपयोग करता हूं। यह ListView लपेटता है। सूची दृश्य की सामग्री किसी सर्वर से डाउनलोड की जाती है।एंड्रॉइड प्रोग्रेसबार ने स्वाइप रीफ्रेशलाइट

सर्वर से डेटा पुनः लोड करने के लिए उपयोगकर्ता स्वाइप होने पर एक प्रगति दृश्य दिखाया जाता है। प्रगति दृश्य सर्कल के एक टुकड़े की तरह दिखता है जो एनीमेशन के दौरान बढ़ता और घटता है। ऐसा लगता है कि इस प्रगति दृश्य की शैली को अधिक अनुकूलित नहीं किया जा सकता है। हालांकि, मैं अपनी अंतर्निहित शैली के साथ ठीक हूं।

मैं प्रारंभिक डेटा लोडिंग के दौरान एक ही प्रगति एनीमेशन भी दिखाता हूं। यह mySwipeRefreshLayout.setRefreshing(true) पर कॉल करके हासिल किया जा सकता है। यह भी बिल्कुल ठीक है।

हालांकि, मैं पूरे ऐप के माध्यम से एक ही प्रगति संकेत दिखाना चाहता हूं। उदाहरण पर विचार करें एक और गतिविधि जो सबमिट बटन के साथ एक फॉर्म की तरह दिखती है। इस फॉर्म गतिविधि में न तो ListView और न ही SwipeRefreshLayout है। सबमिट किए गए डेटा को सर्वर पर स्थानांतरित करते समय कुछ प्रगति संकेत प्रदर्शित किए जाने चाहिए। मैं एक ही एनीमेशन के साथ एक प्रगति पट्टी दिखाना चाहता हूं जैसे SwipeRefreshLayout।

क्या SwipeRefreshLayout दोनों के लिए एक ही प्रगति सूचक होने का एक आसान और साफ तरीका है और एक ऐसी फ़ॉर्म गतिविधि जिसमें कोई सूची दृश्य नहीं है और लेआउट रीफ्रेश नहीं है और किसी भी स्वाइप इशारा का समर्थन नहीं करता है?

धन्यवाद।

उत्तर

7

हालांकि, मैं संपूर्ण ऐप के माध्यम से एक ही प्रगति संकेत दिखाना चाहता हूं। उदाहरण पर विचार करें एक और गतिविधि जो सबमिट बटन के साथ एक फॉर्म की तरह दिखती है। में इस फॉर्म गतिविधि में न तो सूची दृश्य और न ही एक स्वाइप रीफ्रेश Layout है। कुछ प्रगति संकेत प्रदर्शित किए जाने चाहिए जबकि सबमिट किए गए डेटा को सर्वर पर स्थानांतरित कर दिया जाता है। मैं प्रगति पट्टी को उसी एनीमेशन के साथ दिखाना चाहता हूं जैसे SwipeRefreshLayout।

हाँ आप SwipeRefreshLayout का उपयोग ProgressDialog की तरह दिखाने के लिए जब बटन पर क्लिक कर सकते हैं। नीचे जांचें।

enter image description here

मैं अपने लेआउट फाइल के अंदर SwipeRefreshLayout जोड़ लिया है अभी भी वहाँ ListView या ScrollView नहीं है। जैसे नीचे

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical" 
    app:layout_behavior="@string/appbar_scrolling_view_behavior" 
    tools:context="niu.com.djandroid.jdroid.androidstack.MainActivity" 
    tools:showIn="@layout/activity_main"> 

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

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

      <TextView 
       android:id="@+id/textView" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:text="Hello World!" /> 

      <SeekBar 
       android:id="@+id/seekBar" 
       android:layout_width="match_parent" 
       android:layout_height="wrap_content" 
       android:layout_marginTop="54dp" /> 

      <Button 
       android:id="@+id/button" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:text="New Button" /> 
     </LinearLayout> 
    </android.support.v4.widget.SwipeRefreshLayout> 


</LinearLayout> 

अब मेरी गतिविधि में मैं AsyncTask इस्तेमाल किया SwipeRefreshLayout दिखाने के लिए। स्वाइप जेश्चर रोकने के लिए mSwipeRefreshLayout.setOnRefreshListener(null) का भी उपयोग करें।

@Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     mSwipeRefreshLayout = (SwipeRefreshLayout) findViewById(R.id.activity_main_swipe_refresh_layout); 


     mSwipeRefreshLayout.setOnRefreshListener(null); 

     ((Button) findViewById(R.id.button)).setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       // mSwipeRefreshLayout.setRefreshing(true); 
       // call AsyncTask 
       new LongOperation().execute(""); 
      } 
     }); 

    } 

    private class LongOperation extends AsyncTask<String, Void, String> { 

     @Override 
     protected String doInBackground(String... params) { 
      for (int i = 0; i < 5; i++) { 
       try { 
        Thread.sleep(1000); 
       } catch (InterruptedException e) { 
        Thread.interrupted(); 
       } 
      } 
      return "Executed"; 
     } 

     @Override 
     protected void onPostExecute(String result) { 
      // stop mSwipeRefreshLayout 
      mSwipeRefreshLayout.setRefreshing(false); 
     } 

     @Override 
     protected void onPreExecute() { 
      // start mSwipeRefreshLayout 
      mSwipeRefreshLayout.setRefreshing(true); 
     } 

     @Override 
     protected void onProgressUpdate(Void... values) { 
     } 
    } 

संपादित:

आप Github से SwipeRefreshLayoutBottom लाइब्रेरी का उपयोग कर सकते हैं। यह swiperefreshlayout जैसा ही है।जाँच

नीचे

enter image description here

+0

जटिल उदाहरण (+1) के लिए धन्यवाद। मुझे यह स्वीकार करना होगा कि मैं इस दृष्टिकोण के साथ प्रयोग करने के लिए बहुत आलसी था। मुझे अपनी प्रगति एनीमेशन को "चोरी" करने के लिए बस अपनी सभी गतिविधियों को 'स्वाइप रिफ्रेश लयआउट' द्वारा लपेटना होगा। मैं इसे "गंदे" समाधान मानता हूं। मुझे उम्मीद थी कि संभवत: उदाहरण हो सकता है कुछ शैली को 'प्रोग्रेसबार' पर सेट करने का एक तरीका है ताकि यह 'स्वाइप रिफ्रेश लयआउट' के प्रगति दृश्य के समान दिखता हो। – Cimlman

+0

@Cimlman: संपादित उत्तर की जांच करें! –

+0

यकीन नहीं है कि मैं इसे एक गंदे समाधान पर विचार करूंगा, यह वेबव्यू के लिए कार्यान्वित करना आसान था और मानक प्रगति के मुकाबले बेहतर तरीके से दिखता है। धन्यवाद! –

0
mSwipeRefreshLayout.setOnRefreshListener(null) 

मेरे लिए काम नहीं किया है, इसलिए मैं सक्षम और ताज़ा निष्क्रिय करने के लिए इस विधि का बना दिया।

private void setToRefresh(boolean refresh) { 
    if (refresh) { 
     mSwipeRefreshLayout.setEnabled(true); 
     mSwipeRefreshLayout.setRefreshing(true); 
    } else { 
     mSwipeRefreshLayout.setRefreshing(false); 
     mSwipeRefreshLayout.setEnabled(false); 
    } 
} 
संबंधित मुद्दे