android - 水平 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)
}
}
解决方案
推荐阅读
- python - 如何根据日期解析数据帧
- unix - 如何在 solaris 上制作可加载的内核模块?没有Linux
- vue.js - Vue js如何将一个方法(vuex mapGetters方法)全局导入到项目中
- scala - 使用具有常量值的 var 在 Spark DataFrame 中创建新列
- python - 如何使用 Python 将多个大型 .csv 文件导入并读取到 SQL 数据库中的表中?
- r - R的sum()函数中的条件语句
- vue.js - Pusher ChatKit - 房间和房间订阅 - 如何检测新消息
- javascript - 如何将 JSON 文件从 Android 上传到 Firebase 存储?
- asp.net - ASP.NET 2.0 win10无法编译调试?
- javascript - 单击时加载 HMTL5 音频(不是之前,以提高页面速度)