首页 > 解决方案 > 水平 RecyclerView 中的轮播和捕捉:在 Kotlin 中返回结果?

问题描述

我一直在开发一个简单的应用程序,该应用程序具有RecyclerView使用旋转结束时捕捉的旋转木马的水平。旋转结束后,我需要将最终位置从适配器返回到MainActivity. 不幸的是,我正在为此苦苦挣扎,我似乎无法将位置返回到MainActivity?目前我没有从适配器收到任何回复?

谢谢你的帮助。

MainActivity.kt

class MainActivity : AppCompatActivity(), ItemAdapter.OnItemClickListener {
private val itemAdapter by lazy {
    ItemAdapter { position: Int, item: Item ->
        Toast.makeText(this@MainActivity, "Pos ${position}", Toast.LENGTH_LONG).show()
        item_list.smoothScrollToPosition(position)
    } }
private val possibleItems = listOf(
    Item("Plane 1", R.drawable.ic_airplane),
    Item("Car 2", R.drawable.ic_car),
    Item("Meals 3", R.drawable.ic_food),
    Item("Fuel 4", R.drawable.ic_gas),
    Item("Home 5 ", R.drawable.ic_home)
)
override fun onCreate(savedInstanceState: Bundle?) {
    var position: Int
    val thisitem: Item
    var thisunit: Unit
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_main)
    //       var itemAdapter = ItemAdapter(possibleItems)
    //       var thisitemAdapter = ItemAdapter((position, thisitem) -> thisunit)
    //          Toast.makeText(this@MainActivity, "Pos ${position}", Toast.LENGTH_LONG).show()
    //          item_list.smoothScrollToPosition(position) //CAN'T GET THIS TO COMPILE :-( this
    item_list.initialize(itemAdapter)
    itemAdapter.setOnItemClickListener(this) // Added this
    ItemSnapHelper().attachToRecyclerView(item_list)
    item_list.setViewsToChangeColor(listOf(R.id.list_item_background, R.id.list_item_text))
    item_list.scrollToPosition(Int.MAX_VALUE/2)
    itemAdapter.setItems(possibleItems)
}
override
public fun getAdapterPosition(position : Int ){
    Toast.makeText(this,"this is toast message" + position,Toast.LENGTH_SHORT).show()
}
private fun getLargeListOfItems(): List<Item> {
    val items = mutableListOf<Item>()
    (0..40).map { items.add(possibleItems.random()) }
    return items
}
}
data class Item(
    val title: String,
    @DrawableRes val icon: Int
)

项目适配器.kt

class ItemAdapter(val itemClick: (position:Int,item:Item) -> Unit) : RecyclerView.Adapter<ItemViewHolder>() {
private var items: List<Item> = listOf()
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ItemViewHolder =
    ItemViewHolder(LayoutInflater.from(parent.context).inflate(R.layout.list_item, parent, false))
override fun onBindViewHolder(holder: ItemViewHolder, position: Int) {
    val pos = position % items.size
     holder.bind(items[pos])        // bind the actual item
     Log.d("xx position= ", pos.toString())
}
override fun getItemCount(): Int = Int.MAX_VALUE
fun setItems(newItems: List<Item>) {
    items = newItems
    notifyDataSetChanged()
}
lateinit var listener: OnItemClickListener

public interface OnItemClickListener {
    fun getAdapterPosition(position : Int )
}
public fun setOnItemClickListener(listener: OnItemClickListener) {
    this.listener= listener
}
}
class ItemViewHolder(private val view: View) : RecyclerView.ViewHolder(view) {
    fun bind(item: Item) {
        view.list_item_text.text = "${item.title}"
        view.list_item_icon.setImageResource(item.icon)
    }
}

在此处输入图像描述

标签: androidandroid-studiokotlin

解决方案


推荐阅读