Элементы RecyclerView исчезают после всплывающего окна мягкой клавиатуры - PullRequest
1 голос
/ 14 июля 2020

Новичок в Kotlin здесь и возникла эта проблема -

У меня есть фрагмент с представлением ресайклера, который содержит списки - ListsFragment, в моем тестовом случае он содержит 6 списков. Щелчок по списку вызовет второй фрагмент - ItemsFragment. ItemsFragment отображает EditText и recycler с элементами, принадлежащими списку, в моем тестовом примере - 2 элемента на список.

В onCreateView ItemsFragment я использую этот код для получения Recycler ListsFragment -

val fragManager = activity?.supportFragmentManager
val frag = fragManager?.findFragmentByTag("tag_main")
listsRecycler = (frag?.view as View).lists_recycler_view

при просмотре listRecycler в Debug, все выглядит хорошо, я вижу 6 списков - listRecycler в onCreateView ItemsFragment

После того, как я нажмите клавишу ввода и снова посмотрите на listRecycler в Debug, теперь я могу видеть только 4 списка - listRecycler в setOnKeyListener из ItemsFragment

У меня есть «теория», почему такое случается - когда отображаются два элемента, они находятся в верхней части 6 списков из ListFragment, когда я нажимаю на EditText, появляется всплывающая экранная клавиатура и «стирает» последние 2 списка из ListFragment, возможно ли?

Полный код 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 голосов
/ 16 июля 2020

человек. Добро пожаловать в stackoverflow. В основном это происходит потому, что контент должен реагировать на новый размер экрана. Я предлагаю вам прочитать этот вопрос Поведение RecyclerView - Пусто, когда клавиатура открыта / закрыта , это может вам помочь. В основном предлагаются следующие варианты: а) сохранить состояние б) добавить код в манифест.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...