Kotlin的新手在这里遇到了这个问题-
我有一个带有回收站 View 的片段,其中包含列表-ListsFragment,在我的测试案例中,它包含6个列表。
单击列表将调用第二个Fragment-ItemsFragment。
ItemsFragment显示一个EditText和回收站,其中的项目属于列表,在我的测试案例中,每个列表2个项目。
在ItemsFragment的onCreateView 上的中,我正在使用此代码来获取ListsFragment的回收者-
在Debug中查看listRecycler时,一切看起来都很不错,我可以看到6个列表-val fragManager = activity?.supportFragmentManager
val frag = fragManager?.findFragmentByTag("tag_main")
listsRecycler = (frag?.view as View).lists_recycler_view
listRecycler at onCreateView of ItemsFragment
在按Enter键并再次在Debug中查看listRecycler之后,现在我只能看到4个列表-
listRecycler at setOnKeyListener of ItemsFragment
我有一个“理论”,为什么会这样-
当显示两个项目时,它们位于ListFragment的6个列表的顶部,当我单击EditText时,弹出软键盘并“擦除” ListFragment的最后两个列表,这可能吗?
ItemsFragment完整代码-
ListFragment的适配器-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
}
}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 }
最佳答案
人。欢迎使用stackoverflow。基本上发生这种情况是因为内容必须对新的屏幕尺寸使用react。我建议您阅读这个问题RecyclerView behavior - Goes empty when keyboard is opened/closed
它可能会帮助您。基本上,建议是:a)保存状态b)添加一些代码以实现 list 。
关于android - 软键盘弹出后,RecyclerView项目消失,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/62888037/