I am getting a NPE error I don't know why, hence my gridView is not getting populated. This drives me crazy since a week. Any help would be really appreciated.
Attempt to invoke virtual method 'void android.widget.GridView.setAdapter(android.widget.ListAdapter)' on a null object reference at pe.d.myapplication.ui.fragments.HomeFragment.onCreateView(HomeFragment.kt:49)
=> cardview_grid.adapter = adapterHome
class MainActivity : AppCompatActivity() {
private lateinit var binding: ActivityMainBinding
private lateinit var arrayList: ArrayList<Item>
lateinit var homeViewModel: HomeViewModel
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = ActivityMainBinding.inflate(layoutInflater)
setContentView(binding.root)
ViewModelProvider(this).get(HomeViewModel::class.java)
val navView: BottomNavigationView = binding.navView
val navController = findNavController(R.id.nav_host_fragment_activity_main)
// Passing each menu ID as a set of Ids because each
// menu should be considered as top level destinations.
val appBarConfiguration = AppBarConfiguration(
setOf(
R.id.navigation_home,
R.id.navigation_profile,
R.id.navigation_workout,
R.id.navigation_challenges,
R.id.navigation_fns
)
)
setupActionBarWithNavController(navController, appBarConfiguration)
navView.setupWithNavController(navController)
}
}
class HomeFragment : Fragment(R.layout.fragment_home) {
lateinit var homeViewModel: HomeViewModel
private var _binding: FragmentHomeBinding? = null
private lateinit var arrayList: ArrayList<Item>
lateinit var adapterHome: ItemAdapter_home
private val binding get() = _binding!!
override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
homeViewModel = ViewModelProvider(this).get(HomeViewModel::class.java)
_binding = FragmentHomeBinding.inflate(inflater, container, false)
val root: View = binding.root
arrayList = ArrayList<Item>()
arrayList.add(Item("Copacabana", R.drawable.item_copacabana_image, "19"))
adapterHome = ItemAdapter_home(activity, arrayList)
cardview_grid.adapter = adapterHome
return root
}
override fun onDestroyView() {
super.onDestroyView()
_binding = null
}
class ItemAdapter_home: BaseAdapter
{
var ctx : Context? = null
var list = ArrayList<Item>()
constructor(ctx: Context?, list: ArrayList<Item> ) : super() {
this.ctx = ctx
this.list = list
}
override fun getCount(): Int {
return list.size
}
override fun getItem(position: Int): Any {
return position
}
override fun getItemId(position: Int): Long {
return position.toLong()
}
override fun getView(p0: Int, convertView: View?, p2: ViewGroup): View {
var item : Item = this.list[p0]
val inflater: LayoutInflater = ctx!!.getSystemService(Context.LAYOUT_INFLATER_SERVICE) as LayoutInflater
val view:View = inflater.inflate(R.layout.grid_item, null)
view.prog_img_home.setImageResource(item.prog_img_home!!)
view.prog_name_home.text = item.prog_name_home!!
view.nb_clap_home.text = item.nb_clap_home!!
return view!!
}
}
}
class HomeViewModel : ViewModel() {
private val _text = MutableLiveData<String>().apply {
value = "This is home Fragment"
}
val text: LiveData<String> = _text
}
XML
<GridView
android:id="@+id/cardview_grid"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Home page"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
android:numColumns="2"
android:verticalSpacing="15dp"
/>
<ListView
android:id="@+id/lvtablefriend"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
<pe.d.myapplication.ui.AutoScrollingTextView
android:id="@+id/defile"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="24dp"
android:ellipsize="marquee"
android:focusable="true"
android:focusableInTouchMode="true"
android:marqueeRepeatLimit="marquee_forever"
android:scrollHorizontally="true"
android:singleLine="true"
android:text="I am just getting crazy..."
android:textColor="@android:color/holo_orange_dark"
android:textStyle="bold|italic"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/textView" />