2017-09-02 16 views
2

Ich habe eine Liste von einem Beitrag mit Recyclerview. Die Liste ist großartig, aber das Problem kommt, wenn ich versuche, ein Bild in der Recycleransicht hinzuzufügen. Ich verwende Glide, um die Bilder hinzuzufügen. Ich habe das Hinzufügen von Bildern mit Hilfe von Glide im Navigationsschublade nachgelesen, aber wenn ich es bei Recyclerview versuche, zeige es nichts als das Standardbild, das ich gefunden habe.Bild nicht bei Recyclerview mit Glide angezeigt

Dies ist meine Kotlin,

class InformationListActivity : MainActivity() { 
private val glide: RequestManager? = null 

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

    val toolbar = findViewById<View>(R.id.toolbar) as Toolbar 
    setSupportActionBar(toolbar) 
    supportActionBar!!.setDisplayHomeAsUpEnabled(true) 
    supportActionBar!!.setDisplayShowHomeEnabled(true) 

    val user = FirebaseAuth.getInstance().currentUser 
    val uName = user?.displayName 
    val uEmail = user?.email 
    val uPhotoUrl = user?.photoUrl 
    user?.uid 

    val navigationView = findViewById<View>(R.id.nav_view) as NavigationView 
    navigationView.setNavigationItemSelectedListener(this) 
    val headerView = navigationView.getHeaderView(0) 

    val navName = headerView.findViewById<TextView>(R.id.navName) 
    navName.text = uName 
    val navEmail = headerView.findViewById<TextView>(R.id.navEmail) 
    navEmail.text = uEmail 
    val navImage = headerView.findViewById<ImageView>(R.id.navImage) 
    Glide.with(this).load(uPhotoUrl).into(navImage) 

    window.clearFlags(WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS) 

    val signOut = findViewById<View>(R.id.btnSignOut) as LinearLayout 
    signOut.setOnClickListener { 
     FirebaseAuth.getInstance().signOut() 
     val goToLogin = Intent([email protected], LoginActivity::class.java) 
     startActivity(goToLogin) 
    } 


    val recyclerView = findViewById<View>(R.id.recycler_view) as RecyclerView 
    recyclerView.setHasFixedSize(true) 
    recyclerView.layoutManager = LinearLayoutManager(this) 
    val myref = FirebaseDatabase.getInstance().reference.child("/posts") 
    val recyclerAdapter = object : FirebaseRecyclerAdapter<Post, InformationListActivity.PostViewHolder>(
      Post::class.java, 
      R.layout.information_model, 
      InformationListActivity.PostViewHolder::class.java, 
      myref 
    ) { 
     override fun populateViewHolder(viewHolder: InformationListActivity.PostViewHolder, model: Post, position: Int) { 
      val data_empty = findViewById<View>(R.id.data_empty) as TextView 
      data_empty.visibility = View.GONE 
      viewHolder.run { 
       glide?.let { setmPostImageUrl(it,model.getmPostImageUrl()) } 
       setmPostTitle(model.getmPostTitle()) 
       setmPostDescription(model.getmPostDescription()) 
       viewHolder.setItemClickListener(object : ItemClickListener { 
        override fun onItemClick(pos: Int) { 
         //OPEN DETAIL ACTIVITY 
         openInformationDetail(model.getmPostImageUrl(), model.getmPostTitle(), model.getmPostDescription()) 
        } 
       }) 
      } 
     } 
    } 
    recyclerView.adapter = recyclerAdapter 
} 

private fun openInformationDetail(vararg details: String) { 
    val i = Intent(this, InformationDetailActivity::class.java) 
    i.putExtra("POSTIMAGEURL_KEY", details[0]) 
    i.putExtra("POSTTITLE_KEY", details[1]) 
    i.putExtra("POSTDESCRIPTION_KEY", details[2]) 
    startActivity(i) 
} 

class PostViewHolder(mView: View) : RecyclerView.ViewHolder(mView), View.OnClickListener { 
    private var modelImgPost: ImageView = mView.findViewById(R.id.imgPost) 
    private var modelPostTitle: TextView = mView.findViewById(R.id.modelPostTitle) 
    private var modelPostDescription: TextView = mView.findViewById(R.id.modelPostDescription) 
    private var btnMore: Button = mView.findViewById(R.id.btnMore) 
    private lateinit var itemClickListener: ItemClickListener 

    init { 
     btnMore.setOnClickListener(this) 
    } 

    fun setItemClickListener(itemClickListener: ItemClickListener) { 
     this.itemClickListener = itemClickListener 
    } 

    override fun onClick(view: View) { 
     this.itemClickListener.onItemClick(this.layoutPosition) 
    } 

    fun setmPostImageUrl(glide: RequestManager, mPostImageUrl: String) { 
     glide.load(Uri.parse(mPostImageUrl)).into(modelImgPost) 
    } 

    fun setmPostTitle(mPostTitle: String) { 
     modelPostTitle.text = mPostTitle 
    } 

    fun setmPostDescription(mPostDescription: String) { 
     modelPostDescription.text = mPostDescription 
    } 
} 
+0

Lagern Glide nicht in einem Tätigkeitsfeld. Sie können Glide auf der Website wie folgt aufrufen: 'Glide.with (modelImgPost)'. –

Antwort

2
if (glide != null) { 
    setmPostImageUrl(glide, model.getmPostImageUrl()) 
} 

Glide ist null, weil man nie zuweisen/instanziiert.

Ersetzen Sie diese Zeile:

private val glide: RequestManager? = null 

mit:

private var glide: RequestManager? = null 

und in onCreate() tun:

glide = Glide.with(this) 
+0

Ich habe die if-Anweisung entfernen und es immer noch nichts zeigen .. –

+0

@EMFarih Aktualisieren Sie den Code in der Frage, was Sie jetzt haben. – FWeigl

+0

Okay, fertig ... –