【发布时间】:2022-01-07 02:34:29
【问题描述】:
卡了好几天了,如何在fragment中申请recyclerview?它只是不工作。 Fragment.kt 中的 this 给我一个错误“类型不匹配,必需:上下文!”
这是我的 HomePageActivity
package com.haziqharis.golivetvmalaysia
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.view.View
import androidx.fragment.app.Fragment
import com.google.android.material.bottomnavigation.BottomNavigationView
import com.haziqharis.golivetvmalaysia.fragment.*
class HomepageActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
window.decorView.systemUiVisibility = View.SYSTEM_UI_FLAG_FULLSCREEN
actionBar?.hide()
setContentView(R.layout.activity_homepage)
val bottomNavigationView = findViewById<BottomNavigationView>(R.id.bottomNavigationView)
val fragmentHome = HomeFragment()
val fragmentLive = LiveFragment()
val fragmentShopping = ShoppingFragment()
val fragmentCart = CartFragment()
val fragmentProfile = ProfileFragment()
setCurrentFragment(fragmentHome)
bottomNavigationView.setOnNavigationItemSelectedListener {
when(it.itemId){
R.id.homeIcon -> setCurrentFragment(fragmentHome)
R.id.liveIcon -> setCurrentFragment(fragmentLive)
R.id.shoppingIcon -> setCurrentFragment(fragmentShopping)
R.id.cartIcon -> setCurrentFragment(fragmentCart)
R.id.profileIcon -> setCurrentFragment(fragmentProfile)
}
true
}
bottomNavigationView.getOrCreateBadge(R.id.cartIcon).apply {
number = 99
isVisible = true
}
}
private fun setCurrentFragment(fragment: Fragment) =
supportFragmentManager.beginTransaction().apply {
replace(R.id.flFragmentHomepage, fragment)
commit()
}
}
这是我的 Fragment.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"
android:background="@color/blueBackground"
android:padding="20dp"
tools:context=".fragment.ShoppingFragment">
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/shoppingRV"
android:layout_width="match_parent"
android:layout_height="570dp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
这是我的 Fragment.kt
package com.haziqharis.golivetvmalaysia.fragment
import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.fragment.app.Fragment
import com.haziqharis.golivetvmalaysia.R
import com.haziqharis.golivetvmalaysia.data.ProductData
import com.haziqharis.golivetvmalaysia.databinding.ShoppingProductBinding
class ShoppingFragment : Fragment() {
}
package com.haziqharis.golivetvmalaysia.fragment
import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.fragment.app.Fragment
import androidx.recyclerview.widget.LinearLayoutManager
import com.haziqharis.golivetvmalaysia.HomepageActivity
import com.haziqharis.golivetvmalaysia.R
import com.haziqharis.golivetvmalaysia.adapter.ShoppingAdapter
import com.haziqharis.golivetvmalaysia.data.ProductData
import com.haziqharis.golivetvmalaysia.databinding.ShoppingProductBinding
import kotlinx.android.synthetic.main.fragment_shopping.*
class ShoppingFragment : Fragment(R.layout.fragment_shopping) {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
var productList = mutableListOf<ProductData>(
ProductData("Item 1","700$", "Nothing"),
ProductData("Item 2","7300$", "Nothing"),
ProductData("Item 3","7400$", "Nothing"),
ProductData("Item 4","7300$", "Nothing"),
ProductData("Item 5","7100$", "Nothing"),
ProductData("Item 6","7400$", "Nothing"),
ProductData("Item 7","7050$", "Nothing"),
)
val adapter = ShoppingAdapter(productList)
shoppingRV.adapter = adapter
shoppingRV.layoutManager = LinearLayoutManager(this)
}
}
这是我的产品在 recyclerview [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="130dp">
<ImageView
android:id="@+id/productPhoto"
android:layout_width="80dp"
android:layout_height="80dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
android:layout_marginStart="20dp"
app:srcCompat="@drawable/ic_shopping" />
<TextView
android:id="@+id/productTitle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Product Name | Nama Produk"
android:textSize="17sp"
android:textStyle="bold"
android:textColor="@color/black"
android:layout_marginStart="40dp"
app:layout_constraintStart_toEndOf="@+id/productPhoto"
app:layout_constraintTop_toTopOf="@+id/productPhoto" />
<TextView
android:id="@+id/productPrice"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="@color/black"
android:layout_marginTop="6dp"
android:text="RM1 000 000"
app:layout_constraintStart_toStartOf="@+id/productTitle"
app:layout_constraintTop_toBottomOf="@+id/productTitle" />
<TextView
android:id="@+id/productDescription"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/productDescription"
android:textSize="11sp"
android:layout_marginTop="6dp"
app:layout_constraintStart_toStartOf="@+id/productPrice"
app:layout_constraintTop_toBottomOf="@+id/productPrice" />
</androidx.constraintlayout.widget.ConstraintLayout>
这是我的 ProductData.kt
package com.haziqharis.golivetvmalaysia.data
data class ProductData(
val product_name: String,
val product_price: String,
val product_description: String
)
这是我的适配器
package com.haziqharis.golivetvmalaysia.adapter
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.TextView
import androidx.recyclerview.widget.RecyclerView
import com.haziqharis.golivetvmalaysia.R
import com.haziqharis.golivetvmalaysia.data.ProductData
class ShoppingAdapter(
var product: List<ProductData>
) : RecyclerView.Adapter<ShoppingAdapter.ProductView>(){
inner class ProductView(productView: View) : RecyclerView.ViewHolder(productView)
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ProductView {
val view = LayoutInflater.from(parent.context).inflate(R.layout.shopping_product, parent, false)
return ProductView(view)
}
override fun onBindViewHolder(holder: ProductView, position: Int) {
holder.itemView.apply{
val productTitle = findViewById<TextView>(R.id.productTitle)
val productDescription = findViewById<TextView>(R.id.productDesciption)
val productPrice = findViewById<TextView>(R.id.productPrice)
productTitle.text = product[position].product_name
productDescription.text = product[position].product_description
productPrice.text = product[position].product_price
}
}
override fun getItemCount(): Int {
return product.size
}
}
【问题讨论】:
标签: kotlin android-fragments android-recyclerview