Recyclerview not displaying list item but gray background and text "android...RecyclerView" - api

i am a new to Kotlin Android development,i added recycler view to my project and then move the icon to the layout according to the tutorial i was watching but it not displaying anything except gray background and this black text "andriod...recycler" instead of displaying the list items samples as in the tutorial
i suspect it the api level, the android studio version is 3.1
it on Api28, here is the activity_hobbies.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<android.support.v7.widget.RecyclerView
android:layout_width="match_parent"
android:layout_height="match_parent" />
</LinearLayout>
this is HobbiesActivity.tk
package org.blessedmedia.www.kotlinapp
import android.os.Bundle
import android.support.v7.app.AppCompatActivity
class HobbiesActivity : AppCompatActivity(){
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_hobbies)
}
}
if you need any more file to provide solution.kindly comment

Related

Android Studio Beginner here

I am taking the coursera course for mobile application development and I am doing my first project, my build launches successfully then immediately crashes. I am not sure why it is doing this so any insight into the matter would be greatly appreciated. Below is my build...
package com.example.video_player
import android.R
import android.net.Uri
import android.net.Uri.*
import android.os.Bundle
import android.widget.MediaController
import android.widget.VideoView
import androidx.appcompat.app.AppCompatActivity
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
val videoView = findViewById(R.id.testView)
val mediaController = MediaController(this)
mediaController.setAnchorView(videoView)
val uri:Uri = parse(
"android.resource://" + packageName
+ "/raw/test"
)
videoView.setMediaController(mediaController)
videoView.setVideoURI(uri)
videoView.requestFocus()
videoView.start()
}
}
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.example.video_player.MainActivity">
<VideoView
android:id="#+id/testView"
android:layout_width="wrap_content"
android:layout_height="308dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
This is my first build and i am following a tutorial and am just getting error after error, when i get the errors to clear the app crashes directly after launch.

Kotlin - Navigation Components - Navigation action/destination cannot be found from the current destination

ISSUE
java.lang.IllegalArgumentException: Navigation action/destination xxxx/action_scanFragment_to_addVehicleFragment cannot be found from the current destination xxxx/addVehicleFragment
The error occurs when I do
findNavController().navigate(R.id.action_scanFragment_to_addVehicleFragment)
in scanFragment. Which means that current destination is addVehicleFragment, but it should be scanFragment.
I am clueless on how to approach this. See my earlier question for some troubleshooting and what really goes on in scanFragment:
Kotlin - fragment lifecycle navigation issues; why does child fragment become current destination?
I suspect my navigation setup is wrong, but I can't find the solution anywhere.
I'm posting my entire navigation implementation/code below.
My nav_graph design:
My nav_graph XML:
<?xml version="1.0" encoding="utf-8"?>
<navigation xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="#+id/nav_graph"
app:startDestination="#id/mainFragment">
<fragment
android:id="#+id/scanFragment"
android:name="xxxx.ui.scan.ScanFragment"
android:label="#string/tab_bar_first_item_title"
tools:layout="#layout/fragment_scan" >
<action
android:id="#+id/action_scanFragment_to_addVehicleFragment"
app:destination="#id/addVehicleFragment"
app:enterAnim="#anim/from_left"
app:exitAnim="#anim/to_left" />
</fragment>
<fragment
android:id="#+id/addVehicleFragment"
android:name="xxxx.ui.scan.AddVehicleFragment"
android:label="#string/add_vehicle_fragment_title_string"
tools:layout="#layout/fragment_add_vehicle">
<action
android:id="#+id/action_addVehicleFragment_to_scanFragment"
app:destination="#id/scanFragment" />
</fragment>
<fragment
android:id="#+id/mainFragment"
android:name="xxxx.ui.main.MainFragment"
android:label="#string/tab_bar_second_item_title"
tools:layout="#layout/fragment_main" />
<fragment
android:id="#+id/profileFragment"
android:name="xxxx.ui.profile.ProfileFragment"
android:label="#string/tab_bar_third_item_title"
tools:layout="#layout/fragment_profile">
<action
android:id="#+id/actionMyVehicles"
app:destination="#id/myVehiclesFragment"
app:enterAnim="#anim/from_right"
app:exitAnim="#anim/to_left" />
<action
android:id="#+id/actionMyRooms"
app:destination="#+id/myRoomsFragment"
app:enterAnim="#anim/from_right"
app:exitAnim="#anim/to_left" />
</fragment>
<fragment
android:id="#+id/myVehiclesFragment"
android:name="xxxx.ui.profile.MyVehiclesFragment"
android:label="fragment_my_vehicles"
tools:layout="#layout/fragment_my_vehicles" >
<action
android:id="#+id/action_myVehiclesFragment_to_profileFragment"
app:destination="#id/profileFragment"
app:enterAnim="#anim/from_left"
app:exitAnim="#anim/to_right" />
</fragment>
<fragment
android:id="#+id/myRoomsFragment"
android:name="xxxx.ui.profile.MyRoomsFragment"
android:label="fragment_my_rooms"
tools:layout="#layout/fragment_my_rooms" >
<action
android:id="#+id/action_myRoomsFragment_to_profileFragment"
app:destination="#id/profileFragment"
app:enterAnim="#anim/from_left"
app:exitAnim="#anim/to_right" />
</fragment>
</navigation>
My Main Activity XML:
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="#+id/main_activity_layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#color/light_gray"
tools:context=".MainActivity">
<androidx.fragment.app.FragmentContainerView
android:id="#+id/navHostFragment"
android:name="androidx.navigation.fragment.NavHostFragment"
android:layout_width="0dp"
android:layout_height="0dp"
app:defaultNavHost="true"
app:layout_constraintBottom_toTopOf="#+id/tabBar"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:navGraph="#navigation/nav_graph">
</androidx.fragment.app.FragmentContainerView>
<com.google.android.material.bottomnavigation.BottomNavigationView
android:id="#+id/tabBar"
android:layout_width="match_parent"
android:layout_height="58dp"
android:layout_alignParentBottom="true"
app:elevation="2dp"
app:itemBackground="#color/light_gray"
app:itemIconSize="30dp"
app:itemIconTint="#color/tab_bar_icon_tint_color"
app:labelVisibilityMode="unlabeled"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:menu="#menu/tab_bar" />
</androidx.constraintlayout.widget.ConstraintLayout>
MainActivity:
class MainActivity : AppCompatActivity() {
private lateinit var viewBinding: ActivityMainBinding
private lateinit var tabBar: BottomNavigationView
private lateinit var navHostFragment: NavHostFragment
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
println("MainActivity || onCreate ||")
// Initialize viewBinding object
viewBinding = ActivityMainBinding.inflate(layoutInflater)
// Hide the default navigation bar; we implement our own
supportActionBar!!.hide()
viewBinding.loadingPageLayout.visibility = View.GONE
setContentView(viewBinding.root)
setupBottomBarNavigation()
}
private fun setupBottomBarNavigation() {
tabBar = viewBinding.tabBar
navHostFragment = supportFragmentManager.findFragmentById(R.id.navHostFragment) as NavHostFragment
val navigationController = navHostFragment.navController
val appBarConfiguration = AppBarConfiguration(setOf(R.id.scanFragment, R.id.mainFragment, R.id.profileFragment))
setupActionBarWithNavController(navigationController, appBarConfiguration)
tabBar.setupWithNavController(navigationController)
val navHost = supportFragmentManager.currentNavigationFragment
println("Current navigation fragment: $navHost")
}
override fun onSupportNavigateUp() =
Navigation.findNavController(this, R.id.navHostFragment).navigateUp()
Please help a desperate fellow out!
If someone had the same issues due to multiple clicks on the screen. It can be resolved by checking the current destination first before navigating
For example
Fragments A, B, and C
navigating from A to B while clicking on a button in fragment A that navigates to C might lead to crashes in some cases
for that you should check the current destination first as follows:
if(findNavController().currentDestination?.id==R.id.AFragment)
findNavController().navigate(
AFragmentDirections.actionAFragmentToCFragment()
)
The problem was not in Navigation Components but instead - I think - in my ImageAnalyzer. Turns out I accidentally allowed multiple calls to findNavController.navigate(). Now that I fixed that, my navigation issue is gone.

2x NavHostFragments visible in LayoutInspector, but only 1 in my layouts

I have had this issue that seems kind of weird to me. When looking at my app through the Layout Inspector, I can see that my navHostFragment is nested inside itself for some reason:
However, here is what part of my layout file looks like:
<androidx.drawerlayout.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="#+id/activity_layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="false"
tools:context=".core.MainActivity">
<androidx.coordinatorlayout.widget.CoordinatorLayout
android:id="#+id/activity_coordinator_layout"
android:layout_width="match_parent"
android:layout_height="match_parent">
<androidx.fragment.app.FragmentContainerView
android:id="#+id/navHostFragment"
android:name="androidx.navigation.fragment.NavHostFragment"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
I do not inflate another navHostFragment in the fragment container view, so why is the navHostFragment duplicated in layout inspector? Is this somehow normal or is there a hidden navHostFragment being inflated somehow?
Well upon further testing it seems like this additional layer is generated when using <androidx.fragment.app.FragmentContainerView but isn't there when using the <fragment tag.
Since the FragmentContainerView is the recommended container, I assume the duplicate is unavoidable.
I do not know if this could be considered a bug in Fragments or if it is expected behavior.

emre1512 Noty RelativeLayout creation in Kotlin

I have a simple MainActivity with a simple main layout like this:
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent">
<ImageView
... />
</androidx.constraintlayout.widget.ConstraintLayout>
I need to activate Noty on this activity. What I need to know is how to create RelativeLayout "yourLayout" in its simple exmple in Kotlin.
Noty.init(YourActivity.this, "Your warning message", yourLayout, Noty.WarningStyle.SIMPLE).show();
Thank you!
Add an android:id attribute to your ConstraintLayout tag:
android:id="#+id/root"
Now you can fetch a reference to that ConstraintLayout in code:
val root: ConstraintLayout = findViewById(R.id.root)
Noty.init(this#MainActivity, "Your warning message", root, Noty.WarningStyle.SIMPLE).show()

why RecyclerView doesn't work in android 9

Although everything works well in android 8 and lower, but my RecyclerView doesn't load anything in android 9.
because I used Picasso in my recyclerView Adapter, I added code bellow to my AndroidManifest but nothing changed:
android:usesCleartextTraffic="true"
this is my RecyclerView XML code which is located in a MotionLayout:
<LinearLayout
android:id="#+id/linearlayout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="#F6F6F6"
android:elevation="10dp"
android:orientation="horizontal">
<androidx.recyclerview.widget.RecyclerView
android:id="#+id/recycler_challenge"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
</LinearLayout>
note that I have two recyclerView in my layout, the first one, works well
but the second one doesn't work!
Define a xml file, then add to your manifest
->> android:networkSecurityConfig="#xml/network_security_config"
<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
<domain-config cleartextTrafficPermitted="true">
<domain includeSubdomains="true">secure.example.com</domain>
</domain-config>
</network-security-config>