미해결
[왕초보편] 앱 8개를 만들면서 배우는 안드로이드 코틀린(Android Kotlin)
BookMarkActivity에 사진이 안뜹니다! (MainActivity에는 사진 떴음)
1. 망고플레이트 앱 만들기 -> 데이터베이스에 있는 북마크 정보 불러오기 (11분)
2. 내가 작성한 코드
RVAdapter.kt
import android.content.Contextimport android.text.Layoutimport android.view.LayoutInflaterimport android.view.Viewimport android.view.ViewGroupimport android.widget.ImageViewimport android.widget.TextViewimport androidx.recyclerview.widget.ItemTouchHelperimport androidx.recyclerview.widget.RecyclerViewimport com.bumptech.glide.Glideclass RVAdapter(val context : Context, val List : MutableList<ContentsModel>) : RecyclerView.Adapter<RVAdapter.ViewHolder>() { //1. override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RVAdapter.ViewHolder { //rv_item layout inflate val v= LayoutInflater.from(parent.context).inflate(R.layout.rv_item, parent, false) return ViewHolder(v) }
interface ItemClick { fun onClick(view : View, position: Int) } var itemClick : ItemClick ?= null //2.ViewHolder가 Hold하고 있는 위젯에 데이터를 설정하는 형태 override fun onBindViewHolder(holder: RVAdapter.ViewHolder, position: Int) { holder.binditmes(List[position]) if(itemClick != null) { holder?.itemView.setOnClickListener { v-> itemClick!!.onClick(v,position) } } } //3. override fun getItemCount(): Int { return List.size } inner class ViewHolder(itemView : View) : RecyclerView.ViewHolder(itemView) { fun binditmes(item : ContentsModel) { val rv_text = itemView.findViewById<TextView>(R.id.rvTextArea) val rv_img = itemView.findViewById<ImageView>(R.id.rvImageArea) //item: List[position] rv_text.text = item.titleText //Glide : 이미지 로딩 라이브러리 Glide.with(context) .load(item.ImageUrl) .into(rv_img) } }}
ContentsModel.kt
data class ContentsModel (
val url : String = "",
val ImageUrl : String = "",
val titleText : String = ""
)
BookmarkActivity.kt
import androidx.appcompat.app.AppCompatActivityimport android.os.Bundleimport android.util.Logimport androidx.recyclerview.widget.GridLayoutManagerimport androidx.recyclerview.widget.RecyclerViewimport com.google.firebase.auth.FirebaseAuthimport com.google.firebase.auth.ktx.authimport com.google.firebase.database.DataSnapshotimport com.google.firebase.database.DatabaseErrorimport com.google.firebase.database.ValueEventListenerimport com.google.firebase.database.ktx.databaseimport com.google.firebase.ktx.Firebaseclass BookmarkActivity : AppCompatActivity() { private lateinit var auth: FirebaseAuth private val contentsModel = mutableListOf<ContentsModel>() override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_bookmark) val database = Firebase.database val myRef = database.getReference("bookrmark_ref") auth = Firebase.auth val recyclerView = findViewById<RecyclerView>(R.id.rv) val rvAdapter = RVAdapter(this,contentsModel) recyclerView.adapter = rvAdapter recyclerView.layoutManager = GridLayoutManager(this, 2) //데베 값 읽기 myRef.child(auth.currentUser?.uid.toString()) .addValueEventListener(object : ValueEventListener { override fun onDataChange(snapshot: DataSnapshot) { for (dataModel in snapshot.children) { Log.d("BOOKmark", dataModel.toString()) contentsModel.add(dataModel.getValue(ContentsModel::class.java)!!) } //동기화 rvAdapter.notifyDataSetChanged() } override fun onCancelled(error: DatabaseError) { Log.e("Bookmark","dbError") } }) }}
rv_item.xml
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="220dp" xmlns:app="http://schemas.android.com/apk/res-auto" android:orientation="vertical" android:background="@drawable/radius" android:layout_margin="5dp"> <androidx.cardview.widget.CardView android:layout_width="match_parent" android:layout_height="wrap_content" app:cardCornerRadius="30dp"> <ImageView android:id="@+id/rvImageArea" android:layout_marginTop="10dp" android:layout_marginBottom="10dp" android:scaleType="fitXY" android:src="@drawable/ic_launcher_background" android:layout_width="match_parent" android:layout_height="120dp"/> </androidx.cardview.widget.CardView> <TextView android:id="@+id/rvTextArea" android:textStyle="bold" android:textSize="20sp" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="text" android:layout_gravity="center" android:layout_marginTop="30dp"/></LinearLayout>
Bookmark.xml
<?xml version="1.0" encoding="utf-8"?><androidx.constraintlayout.widget.ConstraintLayout 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" tools:context=".BookmarkActivity" android:orientation="vertical"> <TextView android:layout_width="match_parent" android:layout_height="wrap_content" android:gravity="center" android:text="북마크" android:textSize="20sp" android:textStyle="bold" android:layout_marginTop="10dp" app:layout_constraintTop_toTopOf="parent" /> <androidx.recyclerview.widget.RecyclerView android:id="@+id/rv" android:layout_marginTop="50dp" android:layout_width="match_parent" android:layout_height="match_parent" /></androidx.constraintlayout.widget.ConstraintLayout>
3.
북마크 눌렀을 때 나오는 화면
메인 화면