Новичок в 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 }
}