11

मैंने अभी ग्लाइड रीसाइक्लिंगव्यू एकीकरण का उपयोग करने की कोशिश की और इसके बारे में एक दस्तावेज़ पढ़ा और कहा: "रीसाइक्लर व्यू एकीकरण लाइब्रेरी आपके अनुप्रयोग में रीसाइक्लर व्यूप्रेलर उपलब्ध कराता है। RecyclerViewPreloader स्वचालित रूप से छवियों को लोड कर सकता है जहां उपयोगकर्ता रीसाइक्लिंग व्यू में स्क्रॉल कर रहा है ", लेकिन मुझे ग्लाइड रीसाइक्लिंगव्यू एकीकरण और केवल ग्लाइड के बीच कोई अंतर नहीं है, कृपया बताएं कि ग्लाइड रीसाइक्लिंगव्यू एकीकरण की प्रगति क्या है? और मैं अंतर कैसे देख सकता हूं?ग्लाइड रीसाइक्लिंगव्यू एकीकरण की प्रगति क्या है?

यहाँ मेरी कोड है:

GlideModule.kt

@GlideModule 
class GlideModule : AppGlideModule() { 
    override fun applyOptions(context: Context?, builder: GlideBuilder?) { 
     val requestOp = RequestOptions.noAnimation() 
       .priority(Priority.LOW) 
     builder?.setDefaultRequestOptions(requestOp) 
       ?.setLogLevel(Log.VERBOSE) 
     super.applyOptions(context, builder) 
    } 

    // Disable manifest parsing to avoid adding similar modules twice. 
    override fun isManifestParsingEnabled(): Boolean { 
     return false 
    } 
} 

MyPreloadModelProvide.kt

class MyPreloadModelProvide(val listUrls: List<String>, val context: Context) : PreloadModelProvider<Any> { 
    override fun getPreloadItems(position: Int): MutableList<Any> { 
     val url = listUrls.get(position) 
     if (TextUtils.isEmpty(url)) { 
      return Collections.emptyList(); 
     } 
     return Collections.singletonList(url); 
    } 

    override fun getPreloadRequestBuilder(url: Any?): RequestBuilder<*>? { 
     return GlideApp.with(context) 
       .load(url) 
    } 

} 

MyAdapter.kt

class MyAdapter(val listUrl: List<String>, val context: Context) : RecyclerView.Adapter<MyViewHolder>() { 
    override fun getItemCount(): Int = listUrl.size 

    @SuppressLint("CheckResult") 
    override fun onBindViewHolder(holder: MyViewHolder?, position: Int) { 

     GlideApp.with(context) 
       .load(listUrl[position]) 
       .into(holder?.imageView) 

     holder?.imageView?.setOnClickListener { Toast.makeText(context, listUrl[position], Toast.LENGTH_LONG).show() } 
    } 

    override fun onCreateViewHolder(parent: ViewGroup?, viewType: Int): MyViewHolder = MyViewHolder(LayoutInflater.from(parent?.context).inflate(R.layout.item, parent, false)) 
} 

class MyViewHolder(view: View?) : RecyclerView.ViewHolder(view) { 
    var imageView: ImageView 

    init { 
     imageView = view!!.findViewById(R.id.img) 
    } 
} 

MainActivity.kt

class MainActivity : AppCompatActivity() { 

    private lateinit var preloadSizeProvider: ViewPreloadSizeProvider<Any> 

    override fun onCreate(savedInstanceState: Bundle?) { 
     super.onCreate(savedInstanceState) 
     setContentView(R.layout.activity_main) 

     // glide 
     var listUrls = listOf(
       "https://img.pokemondb.net/artwork/bulbasaur.jpg", 
       "https://img.pokemondb.net/artwork/ivysaur.jpg", 
       "https://img.pokemondb.net/artwork/komala.jpg", 
       "https://img.pokemondb.net/artwork/turtonator.jpg", 
       "https://img.pokemondb.net/artwork/togedemaru.jpg", 
       "https://img.pokemondb.net/artwork/mimikyu.jpg", 
       "https://img.pokemondb.net/artwork/nihilego.jpg", 
       "https://img.pokemondb.net/artwork/buzzwole.jpg", 
       "https://img.pokemondb.net/artwork/pheromosa.jpg", 
       "https://img.pokemondb.net/artwork/xurkitree.jpg", 
       "https://img.pokemondb.net/artwork/celesteela.jpg", 
       "https://img.pokemondb.net/artwork/kartana.jpg", 
       "https://img.pokemondb.net/artwork/guzzlord.jpg", 
       "https://img.pokemondb.net/artwork/necrozma.jpg", 
       "https://img.pokemondb.net/artwork/magearna.jpg", 
       "https://img.pokemondb.net/artwork/marshadow.jpg" 
     ) 

     preloadSizeProvider = ViewPreloadSizeProvider<Any>() 
     val modelProvider = MyPreloadModelProvide(listUrls, this) 
     val preloader = RecyclerViewPreloader(GlideApp.with(this), modelProvider, preloadSizeProvider, 2 /*maxPreload*/) 

     // recycler view 
     recycler_view.layoutManager = LinearLayoutManager(this) 
     recycler_view.setHasFixedSize(true) 
     recycler_view.adapter = MyAdapter(listUrls, this) 

     // THERE ARE NO DIFFERENCES IF I COMMENT THIS LINE 
     recycler_view.addOnScrollListener(preloader) 
    } 
} 

वहां कोई मतभेद नहीं अगर मैं इस लाइन recycler_view.addOnScrollListener(preloader)

उत्तर

2

RecyclerView एकीकरण पुस्तकालय अपने आवेदन में RecyclerViewPreloader उपलब्ध बनाता टिप्पणी जा सकता है।
और RecyclerViewPreloader उपयोगकर्ता RecyclerView में स्क्रॉल कर रहा है, इससे पहले छवियों को स्वचालित रूप से लोड कर सकता है।

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

RecyclerView एकीकरण लाइब्रेरी का उपयोग करने के लिए, अपने build.gradle फ़ाइल में उस पर एक निर्भरता जोड़ें: आपके उत्तर के लिए

compile ("com.github.bumptech.glide:recyclerview-integration:4.4.0") { 
    /*Excludes the support library 
    because it's already included by Glide.*/ 
    transitive = false 
} 
+0

धन्यवाद, मैं कैसे अंतर देख सकते हैं? – vuhung3990

+1

कृपया धीमे नेटवर्क कनेक्टिविटी या 2 जी नेटवर्क पर अपने आवेदन का उपयोग करें, आप अंतर देख सकते हैं –

+1

यदि आप इसे उपयोगी पाते हैं तो इसे स्वीकार्य उत्तर के रूप में चिह्नित करें –

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