用Kotlin写一个项目第一个Fragment包含一个RecyclerView,每个item的界面为左侧一个水果图 像,右侧显示水果名称和单价,点击任一item可显示第二个Fragment,如 图1a; •第二个Fragment界面如图1b所示,点击其中的“+”,“-“键可更改订 单数量;
时间: 2024-04-24 22:21:57 浏览: 22
好的,这是一个关于使用 Kotlin 编写 Android 项目的问题,需要实现一个包含 RecyclerView 的 Fragment,同时点击 RecyclerView 中的 item 可以切换到第二个 Fragment。第二个 Fragment 中可以修改订单数量。
首先,我们需要在 build.gradle 文件中添加以下依赖:
```
dependencies {
implementation 'androidx.recyclerview:recyclerview:1.1.0'
}
```
然后,我们可以创建一个名为 Fruit 的数据类,包含水果名称、单价和图片的资源 ID:
```kotlin
data class Fruit(val name: String, val price: Double, val imageResId: Int)
```
接下来,我们可以创建一个名为 FruitAdapter 的 RecyclerView.Adapter,用于显示水果列表:
```kotlin
class FruitAdapter(private val fruits: List<Fruit>, private val onClickListener: (Fruit) -> Unit) :
RecyclerView.Adapter<FruitAdapter.ViewHolder>() {
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
val view = LayoutInflater.from(parent.context).inflate(R.layout.item_fruit, parent, false)
return ViewHolder(view)
}
override fun onBindViewHolder(holder: ViewHolder, position: Int) {
val fruit = fruits[position]
holder.nameText.text = fruit.name
holder.priceText.text = "${fruit.price} 元"
holder.imageView.setImageResource(fruit.imageResId)
holder.itemView.setOnClickListener { onClickListener(fruit) }
}
override fun getItemCount(): Int {
return fruits.size
}
class ViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
val nameText: TextView = itemView.findViewById(R.id.nameText)
val priceText: TextView = itemView.findViewById(R.id.priceText)
val imageView: ImageView = itemView.findViewById(R.id.imageView)
}
}
```
其中 item_fruit.xml 布局文件中包含一个 ImageView 和两个 TextView,用于显示水果图片、名称和单价。
接着,我们可以创建一个名为 FruitListFragment 的 Fragment,用于显示水果列表:
```kotlin
class FruitListFragment : Fragment() {
private lateinit var recyclerView: RecyclerView
private lateinit var adapter: FruitAdapter
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
val view = inflater.inflate(R.layout.fragment_fruit_list, container, false)
recyclerView = view.findViewById(R.id.recyclerView)
recyclerView.layoutManager = LinearLayoutManager(context)
adapter = FruitAdapter(getFruits(), ::onItemClick)
recyclerView.adapter = adapter
return view
}
private fun onItemClick(fruit: Fruit) {
val fragment = FruitDetailFragment.newInstance(fruit)
parentFragmentManager.beginTransaction()
.replace(R.id.container, fragment)
.addToBackStack(null)
.commit()
}
private fun getFruits(): List<Fruit> {
return listOf(
Fruit("苹果", 5.0, R.drawable.apple),
Fruit("香蕉", 2.5, R.drawable.banana),
Fruit("橙子", 3.0, R.drawable.orange),
Fruit("草莓", 10.0, R.drawable.strawberry),
Fruit("葡萄", 8.0, R.drawable.grape),
Fruit("梨子", 4.0, R.drawable.pear),
Fruit("西瓜", 6.0, R.drawable.watermelon)
)
}
}
```
其中 fragment_fruit_list.xml 布局文件中包含一个 RecyclerView。
最后,我们可以创建一个名为 FruitDetailFragment 的 Fragment,用于显示水果详情和订单数量:
```kotlin
class FruitDetailFragment : Fragment() {
private lateinit var fruit: Fruit
private lateinit var imageView: ImageView
private lateinit var nameText: TextView
private lateinit var priceText: TextView
private lateinit var quantityText: TextView
private lateinit var plusButton: Button
private lateinit var minusButton: Button
companion object {
private const val ARG_FRUIT = "fruit"
fun newInstance(fruit: Fruit): FruitDetailFragment {
val args = Bundle()
args.putSerializable(ARG_FRUIT, fruit)
val fragment = FruitDetailFragment()
fragment.arguments = args
return fragment
}
}
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
val view = inflater.inflate(R.layout.fragment_fruit_detail, container, false)
fruit = arguments?.getSerializable(ARG_FRUIT) as Fruit
imageView = view.findViewById(R.id.imageView)
nameText = view.findViewById(R.id.nameText)
priceText = view.findViewById(R.id.priceText)
quantityText = view.findViewById(R.id.quantityText)
plusButton = view.findViewById(R.id.plusButton)
minusButton = view.findViewById(R.id.minusButton)
imageView.setImageResource(fruit.imageResId)
nameText.text = fruit.name
priceText.text = "${fruit.price} 元"
quantityText.text = "1"
plusButton.setOnClickListener { onQuantityChange(1) }
minusButton.setOnClickListener { onQuantityChange(-1) }
return view
}
private fun onQuantityChange(delta: Int) {
var quantity = quantityText.text.toString().toInt() + delta
if (quantity < 1) {
quantity = 1
}
quantityText.text = quantity.toString()
}
}
```
其中 fragment_fruit_detail.xml 布局文件中包含一个 ImageView、两个 TextView、两个 Button 和一个 TextView,用于显示水果图片、名称、单价、订单数量、增加数量和减少数量。
这样,我们就完成了一个简单的 Android 项目,包含两个 Fragment,其中第一个 Fragment 包含一个 RecyclerView,点击 RecyclerView 中的 item 可以切换到第二个 Fragment,第二个 Fragment 中可以修改订单数量。
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)