11

Ich habe gerade versucht, glide recyclerview Integration zu verwenden und ein Dokument darüber zu lesen und es sagte: "Die RecyclerView Integrationsbibliothek macht den RecyclerViewPreloader in Ihrer Anwendung verfügbar. RecyclerViewPreloader kann automatisch Bilder direkt vor dem Scrollen eines Benutzers in einem RecyclerView laden ", aber ich erkenne keinen Unterschied zwischen Glide Recyclerview Integration und nur Glide, bitte erläutern, was sind Fortschritte der Glide Recyclerview Integration? Und wie kann ich den Unterschied sehen?Was sind Fortschritte bei der Glide-Recyclerview-Integration?

Hier ist mein Code:

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) 
    } 
} 

gibt es keine Unterschiede, wenn ich diese Zeile Bemerkung recycler_view.addOnScrollListener(preloader)

Antwort

2

Die RecyclerView Integrationsbibliothek macht die RecyclerViewPreloader in Ihrer Anwendung zur Verfügung.
Und RecyclerViewPreloader kann automatisch Bilder direkt vor, wo ein Benutzer in einem RecyclerView scrollen lädt.

Kombiniert mit der richtigen Bildgröße und einer effektiven Festplatten-Cache-Strategie kann diese Bibliothek die Anzahl der Ladekacheln/Indikatoren beim Scrollen durch Bildlisten drastisch reduzieren, indem sichergestellt wird, dass die Bilder, die der Benutzer gerade erreicht, bereits vorhanden sind in Erinnerung.

Um die RecyclerView Integration Bibliothek zu verwenden, eine Abhängigkeit von ihm in Ihrer build.gradle Datei hinzufügen:

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

dankt für Ihre Antwort, wie kann ich die Unterschiede sehen? – vuhung3990

+1

Bitte verwenden Sie Ihre Anwendung auf langsamen Netzwerkkonnektivität oder 2G-Netzwerk als Sie den Unterschied sehen können –

+1

Bitte markieren Sie es als akzeptierte Antwort, wenn Sie es hilfreich finden –

Verwandte Themen