I'm trying to add elements to a RecyclerView but I'm getting this error
java.lang.IllegalStateException: contact_list must not be null
Caused by: java.lang.IllegalStateException: contact_list must not be null at com.example.nuevaappcoche.MainActivity.onCreate(MainActivity.kt:62)
At line 62, this is the code:
contact_list.layoutManager = LinearLayoutManager(this)
I tried the accepted answer of this post but still not working.
My code:
Fragment
class CallFragment : Fragment() {
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
// Inflate the layout for this fragment
return inflater.inflate(R.layout.fragment_call, container, false)
}
}
MainActivity
class MainActivity : AppCompatActivity(),OnContactClickListener {
private lateinit var callFragment: CallFragment
private lateinit var navigationFragment: NavigationFragment
private lateinit var musicFragment: MusicFragment
private var contact = ContactDTO()
private var position: Int = 0
private var isPhoneCall = false
private var lastState = TelephonyManager.CALL_STATE_IDLE
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
setSupportActionBar(toolbar)
callFragment = CallFragment()
navigationFragment =
NavigationFragment()
musicFragment = MusicFragment()
tablayout.setupWithViewPager(viewpager)
var viewPagerAdapter:ViewPagerAdapter = ViewPagerAdapter(supportFragmentManager, 0)
viewPagerAdapter.addFragment(navigationFragment,"")
viewPagerAdapter.addFragment(callFragment,"")
viewPagerAdapter.addFragment(musicFragment,"")
viewpager.adapter = viewPagerAdapter
tablayout.getTabAt(0)?.setIcon(R.drawable.ic_carbon_phone)
tablayout.getTabAt(1)?.setIcon(R.drawable.ic_carbon_map)
tablayout.getTabAt(2)?.setIcon(R.drawable.ic_carbon_music)
contact_list.layoutManager = LinearLayoutManager(this)
contact_list.addItemDecoration(
DividerItemDecoration(
contact_list.context,
DividerItemDecoration.HORIZONTAL
)
)
val contactList : MutableList<ContactDTO> = ArrayList()
val contacts = contentResolver.query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI,null,null,null,null)
if (contacts != null) {
while (contacts.moveToNext()){
val name = contacts?.getString(contacts.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME))
val number = contacts.getString(contacts.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER))
val obj = ContactDTO()
obj.name = name
obj.number = number
val photo_uri = contacts?.getString(contacts.getColumnIndex(ContactsContract.CommonDataKinds.Phone.PHOTO_URI))
if(photo_uri != null){
obj.image = MediaStore.Images.Media.getBitmap(contentResolver,Uri.parse(photo_uri))
}
contactList.add(obj)
}
}
contact_list.adapter = ContactAdapter(this,contactList,this)
contacts?.close()
crossImg.setOnClickListener{
contact_details.visibility = View.GONE
}
ib_phone.setOnClickListener{
callPhone()
}
}
private fun callPhone() {
if (tv_contact_phone != null) {
val phoneNumber = tv_contact_phone.text.toString().trim()
val intent = Intent(Intent.ACTION_CALL)
intent.data = Uri.parse("tel:$phoneNumber")
if (ActivityCompat.checkSelfPermission(
this,
android.Manifest.permission.CALL_PHONE
) == PackageManager.PERMISSION_GRANTED
) {
lastState = TelephonyManager.CALL_STATE_RINGING
isPhoneCall = true
startActivity(intent)
} else {
ActivityCompat.requestPermissions(
this,
arrayOf(android.Manifest.permission.CALL_PHONE),
2000
)
}
}
}
override fun onContactClick(contact: ContactDTO) {
contact_details.visibility = View.VISIBLE
this.contact = contact
position = 0
tv_contact_name.text = contact.name
tv_contact_phone.text = contact.number
if (contact.image != null) {
civ_contact.setImageBitmap(contact.image)
} else {
civ_contact.setImageResource(R.drawable.ic_launcher_foreground)
}
}
class ViewPagerAdapter(fm: FragmentManager, behavior: Int) : FragmentPagerAdapter(fm, behavior) {
private var fragments : MutableList<Fragment> = ArrayList()
private var fragmentTitle : MutableList<String> = ArrayList()
fun addFragment(fragment:Fragment,title:String){
fragments.add(fragment)
fragmentTitle.add(title)
}
override fun getItem(position: Int): Fragment {
return fragments.get(position)
}
override fun getCount(): Int {
return fragments.size
}
override fun getPageTitle(position: Int): CharSequence? {
return fragmentTitle.get(position)
}
}
}