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

Android 软键盘弹出后,RecyclerView项目消失,android,kotlin,android-recyclerview,android-softkeyboard,Android,Kotlin,Android Recyclerview,Android Softkeyboard,刚到Kotlin这里就遇到了这个问题- 我有一个带有recycler视图的片段,它包含列表——ListsFragment,在我的测试用例中,它包含6个列表。 单击列表将调用第二个片段-ItemsFragment。 ItemsFragment显示一个EditText和recycler,其中的项目属于列表,在我的测试用例中,每个列表2个项目 在ItemsFragment的onCreateView中,我使用此代码获取ListsFragment的回收器- val fragManager = activi

刚到Kotlin这里就遇到了这个问题-

我有一个带有recycler视图的片段,它包含列表——ListsFragment,在我的测试用例中,它包含6个列表。 单击列表将调用第二个片段-ItemsFragment。 ItemsFragment显示一个EditText和recycler,其中的项目属于列表,在我的测试用例中,每个列表2个项目

在ItemsFragment的onCreateView中,我使用此代码获取ListsFragment的回收器-

val fragManager = activity?.supportFragmentManager
val frag = fragManager?.findFragmentByTag("tag_main")
listsRecycler = (frag?.view as View).lists_recycler_view
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 }
当在调试中查看listRecycler时,一切看起来都很好,我可以看到6个列表-

在我按下enter键并再次在调试中查看listRecycler之后,现在我只能看到4个列表-

我有一个“理论”解释它为什么会发生- 当显示这两个项目时,它们位于ListFragment中的6个列表的顶部,当我单击编辑文本时,软键盘弹出并“擦除”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
}
class-ItemsFragment:Fragment(){
lateinit var viewAdapter:RecyclerView.Adapter
var table1=mutableListOf()
lateinit变量工具栏:工具栏
lateinit变量theView:View
lateinit变量listsRecycler:RecyclerView
覆盖创建视图(充气机:布局充气机,容器:ViewGroup?,savedInstanceState:Bundle?):视图{
视图=充气机。充气(R.layout.fragment\u项目,容器,错误)
var txt\u add\u item=view.findviewbyd(R.id.txt\u add\u item)
txt_add_item.setOnKeyListener(View.OnKeyListener{v,keyCode,event->
如果(keyCode==KeyEvent.keyCode\u输入&&event.action==KeyEvent.action\u向上){
makeToast()
真的
}
假的
})
val fragManager=活动?.supportFragmentManager
val frag=fragManager?.findFragmentByTag(“tag_main”)
listsRecycler=(frag?.view作为视图)。列表\u回收器\u视图
返回视图
}
有趣的烤面包片{
Toast.makeText(上下文,“按Enter键”,Toast.LENGTH\u SHORT.show())
}
覆盖乐趣启动(){
super.onStart()
var anItem=Items()
anItem.itemName=“项目1”
表1.添加(0,一个项目)
anItem=Items()
anItem.itemName=“项目2”
表1.增加(1,项目)
viewAdapter=ItemsAdapter(表1)
项目\u回收器\u view.adapter=视图适配器
}
ListFragment的适配器-

val fragManager = activity?.supportFragmentManager
val frag = fragManager?.findFragmentByTag("tag_main")
listsRecycler = (frag?.view as View).lists_recycler_view
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 }
类listsdapter(private val logList:MutableList):RecyclerView.Adapter(){
override onCreateViewHolder(父级:ViewGroup,viewType:Int):ViewHolder{
val view=LayoutInflater.from(parent.context).充气(R.layout.list_项,parent,false)
返回视图保持器(视图)
}
类ViewHolder(itemView:View):RecyclerView.ViewHolder(itemView){
val txvLog:TextView=itemView.findViewById(R.id.txt\u列表\u名称)
}
覆盖BindViewHolder(holder:ViewHolder,位置:Int){
holder.txvLog.text=日志列表[位置].listName
holder.itemView.setOnClickListener{v->
val context=v.context
val activity=作为AppCompative的上下文
var fragment=ItemsFragment()
activity.supportFragmentManager
.beginTransaction()
.添加((R.id.frame\u布局),片段,“标签列表”)
.commit()
}
}
重写fun getItemCount():Int{return logList.size}

}伙计。欢迎来到stackoverflow。基本上,这是因为内容必须对新的屏幕大小做出反应。我建议你阅读这个问题
这可能会对您有所帮助。基本上,建议是:a)保存状态b)添加一些代码到清单。

man.欢迎使用stackoverflow。基本上,出现这种情况是因为内容必须对新的屏幕大小做出反应。我建议您阅读此问题
这可能会对您有所帮助。基本上,建议是:a)保存状态b)添加一些代码以显示。

谢谢!您是对的,这可能就是发生的情况,我的活动中已经有了“AdjustPan”,但这个问题仍然发生在我的片段中……如果您在onstart方法中使用以下代码行,它可能会修复它:adapter.submitList(yourlist)谢谢!你是对的,这可能就是发生的情况,我的活动中已经有了“AdjustPan”,但这个问题仍然出现在我的片段中…如果你在onstart方法中使用以下代码行,它可能会修复它:adapter.submitList(yourlist)