软键盘弹出后,RecyclerView项目消失

时间:2020-07-14 04:19:59

标签: android kotlin android-recyclerview android-softkeyboard

这里是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

按下Enter键并再次在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 }

}

1 个答案:

答案 0 :(得分:0)

男人。欢迎使用stackoverflow。基本上发生这种情况是因为内容必须对新的屏幕尺寸做出反应。建议您阅读此问题RecyclerView behavior - Goes empty when keyboard is opened/closed 它可能会帮助您。基本上,建议是:a)保存状态b)添加一些代码以实现清单。