【发布时间】:2020-07-14 04:19:59
【问题描述】:
这里是 Kotlin 新手,遇到了这个问题 -
我有一个带有回收器视图的片段,其中包含列表 - ListsFragment,在我的测试用例中它包含 6 个列表。 单击列表将调用第二个 Fragment - ItemsFragment。 ItemsFragment 显示一个 EditText 和回收器,其中项目属于列表,在我的测试用例中,每个列表 2 个项目。
在ItemsFragment的onCreateView中,我是用这段代码来获取ListsFragment的回收器-
val fragManager = activity?.supportFragmentManager
val frag = fragManager?.findFragmentByTag("tag_main")
listsRecycler = (frag?.view as View).lists_recycler_view
在 Debug 中查看 listRecycler 时,一切看起来都不错,我可以看到 6 个列表 - listRecycler at onCreateView of ItemsFragment
在我按回车键并在 Debug 中再次查看 listRecycler 后,现在我只能看到 4 个列表 - listRecycler at setOnKeyListener of ItemsFragment
我有一个“理论”为什么会发生 - 当显示这两个项目时,它们位于 ListFragment 的 6 个列表的顶部,当我单击 EditText 时弹出软键盘并从 ListFragment 中“擦除”最后 2 个列表,这可能吗?
ItemsFragment完整代码-
class ItemsFragment : Fragment() {
lateinit var viewAdapter: RecyclerView.Adapter<*>
var table1 = mutableListOf<Items>()
lateinit var toolbar : Toolbar
lateinit var theView : View
lateinit var listsRecycler : RecyclerView
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
theView = inflater.inflate(R.layout.fragment_items, container, false)
var txt_add_item = theView.findViewById<EditText>(R.id.txt_add_item)
txt_add_item.setOnKeyListener(View.OnKeyListener { v, keyCode, event ->
if (keyCode == KeyEvent.KEYCODE_ENTER && event.action == KeyEvent.ACTION_UP) {
makeToast()
true
}
false
})
val fragManager = activity?.supportFragmentManager
val frag = fragManager?.findFragmentByTag("tag_main")
listsRecycler = (frag?.view as View).lists_recycler_view
return theView
}
fun makeToast() {
Toast.makeText(context, "Enter Key Pressed", Toast.LENGTH_SHORT).show()
}
override fun onStart () {
super.onStart()
var anItem = Items()
anItem.itemName = "Item 1"
table1.add(0, anItem)
anItem = Items()
anItem.itemName = "Item 2"
table1.add(1, anItem)
viewAdapter = ItemsAdapter(table1)
items_recycler_view.adapter = viewAdapter
}
ListFragment 的适配器 -
class ListsAdapter(private val logList: MutableList<Lists>) : RecyclerView.Adapter<ListsAdapter.ViewHolder>() {
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
val view = LayoutInflater.from(parent.context).inflate(R.layout.list_item, parent, false)
return ViewHolder(view)
}
class ViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
val txvLog : TextView = itemView.findViewById(R.id.txt_list_name)
}
override fun onBindViewHolder(holder: ViewHolder, position: Int) {
holder.txvLog.text = logList[position].listName
holder.itemView.setOnClickListener { v ->
val context = v.context
val activity = context as AppCompatActivity
var fragment = ItemsFragment()
activity.supportFragmentManager
.beginTransaction()
.add((R.id.frame_layout), fragment, "tag_list")
.commit()
}
}
override fun getItemCount(): Int { return logList.size }
}
【问题讨论】:
标签: android kotlin android-recyclerview android-softkeyboard