Я пытаюсь создать RecyclerView во фрагменте, но получаю нулевую ошибку в RecyclerView. Мне удалось успешно создать фрагмент, используя новый компонент архитектуры навигации с нижней панелью навигации. У меня работает Android Studio Canary 3.2 Beta 1.
Обратите внимание, что я ошибся, потому что я не вижу красных линий в Android Studio.
Ошибка отладки
E / AndroidRuntime: FATAL EXCEPTION: main
Процесс: com.projects.arise.mytestapp, PID: 28285
java.lang.RuntimeException: невозможно запустить действие ComponentInfo {com.projects.arise.mytestapp / com.projects.arise.mytestapp.MainActivity}:
java.lang.IllegalStateException: rview_keys не должно быть нулевым
на android.app.ActivityThread.performLaunchActivity (ActivityThread.java:2817)
на android.app.ActivityThread.handleLaunchActivity (ActivityThread.java:2892)
atroid.app.ActivityThread.-wrap11 (неизвестный источник: 0)
на android.app.ActivityThread $ H.handleMessage (ActivityThread.java:1593)
на android.os.Handler.dispatchMessage (Handler.java:105)
на android.os.Looper.loop (Looper.java:164)
на android.app.ActivityThread.main (ActivityThread.java:6541)
в java.lang.reflect.Method.invoke (родной метод)
на com.android.internal.os.Zygote $ MethodAndArgsCaller.run (Zygote.java:240)
на com.android.internal.os.ZygoteInit.main (ZygoteInit.java:767)
Вызывается: java.lang.IllegalStateException: rview_keys не должно быть нулевым
в com.projects.arise.mytestapp.MainActivity.onCreate (MainActivity.kt: 55)
на android.app.Activity.performCreate (Activity.java:6975)
на android.app.Instrumentation.callActivityOnCreate (Instrumentation.java:1213)
на android.app.ActivityThread.performLaunchActivity (ActivityThread.java:2770)
на android.app.ActivityThread.handleLaunchActivity (ActivityThread.java:2892)
atroid.app.ActivityThread.-wrap11 (неизвестный источник: 0)
на android.app.ActivityThread $ H.handleMessage (ActivityThread.java:1593)
на android.os.Handler.dispatchMessage (Handler.java:105)
на android.os.Looper.loop (Looper.java:164)
на android.app.ActivityThread.main (ActivityThread.java:6541)
в java.lang.reflect.Method.invoke (родной метод)
на com.android.internal.os.Zygote $ MethodAndArgsCaller.run (Zygote.java:240)
на com.android.internal.os.ZygoteInit.main (ZygoteInit.java:767)
MainActivity.kt
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
val host: NavHostFragment = supportFragmentManager
.findFragmentById(R.id.nav_host_fragment) as NavHostFragment? ?: return
val navController = host.navController
setupBottomNavMenu(navController)
}
override fun onSupportNavigateUp(): Boolean {
return Navigation.findNavController(this, R.id.nav_host_fragment).navigateUp()
}
private fun setupBottomNavMenu(navController: NavController) {
findViewById<BottomNavigationView>(R.id.navigation)?.let { bottomNavView ->
NavigationUI.setupWithNavController(bottomNavView, navController)
}
}
}
FragmentKeys.kt
class FragmentKeys : Fragment() {
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
setHasOptionsMenu(true)
return inflater.inflate(R.layout.fragment_keys_layout, container, false)
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
}
override fun onActivityCreated(savedInstanceState: Bundle?) {
super.onActivityCreated(savedInstanceState)
//val rview_keys: RecyclerView = findViewById(R.id.rview_keys)
rview_keys.layoutManager = LinearLayoutManager(context)
rview_keys.adapter = AdapterKeys(KeysListObjects.keys)
}
}
Я прокомментировал одну строку выше, потому что я получал ошибку «неразрешенная ссылка» на «findViewById». Эта строка, казалось, не была необходима, поскольку это не было в коде других людей. Например: Kotlin Android Fragger recyclerПросмотр и проблема контекста
AdapterKeys.kt
class AdapterKeys(val keys: List<KeysList>) : RecyclerView.Adapter<AdapterKeys.KeysViewHolder>() {
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): KeysViewHolder {
val view = LayoutInflater.from(parent?.context).inflate(R.layout.list_item_keys, parent, false)
return KeysViewHolder(view)
}
override fun getItemCount() : Int {
return keys.size
} //override fun getItemCount() = keys.size
override fun onBindViewHolder(holder: KeysViewHolder, position: Int) {
val keysList = keys[position]
holder.setData(keysList, position)
}
inner class KeysViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
fun setData(keysList: KeysList?, position: Int) {
itemView.tview_Keys.text = keysList!!.keysText
}
}
}
ModelKeys.kt
object KeysListObjects {
val keys = listOf<KeysList>(
KeysList("Testing1"),
KeysList("Testing2"),
KeysList("Testing3")
)
}