How can i open up a new activity from cardview with my current build

82 Views Asked by At

If I should change it from card to maybe a button for easier code please let me know, but I have tried multiple ways with card view and none seem to be working for me. Im trying to open a new activity when i click the cardview for DashboardTmsActivity.

current error is this

MainActivity.kt
Modifier 'override' is not applicable to 'local function':19
Unresolved reference: activity
Unresolved reference: activity:23

here is my current code.

MainActivity.kt

package com.cameron.armymaintenance

import android.content.Intent
import android.os.Bundle
import android.view.View
import androidx.cardview.widget.CardView
import com.cameron.armymaintenance.databinding.ActivityDashboardTmsBinding
import com.cameron.armymaintenance.databinding.ActivityMainBinding

class MainActivity : DrawerBaseActivity() {

    private lateinit var binding: ActivityMainBinding

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        binding = ActivityMainBinding.inflate(layoutInflater)
        setContentView(binding.root)

        override fun onViewCreated(view: View, savedInstanceState: Bundle?) {

            view.findViewById<CardView>(R.id.card1).setOnClickListener {
                val card1 = Intent(activity, ActivityDashboardTmsBinding::class.java)
                activity?.startActivity(card1)
            }
        }
    }
}

DrawerBaseActivity.kt

package com.cameron.armymaintenance

import android.os.Bundle
import android.view.MenuItem
import android.view.View
import android.widget.FrameLayout
import androidx.appcompat.app.ActionBarDrawerToggle
import androidx.appcompat.app.AppCompatActivity
import androidx.appcompat.widget.Toolbar
import androidx.drawerlayout.widget.DrawerLayout
import com.google.android.material.navigation.NavigationView

open class DrawerBaseActivity : AppCompatActivity(), NavigationView.OnNavigationItemSelectedListener {


    var drawerLayout: DrawerLayout? = null

    override fun setContentView(view: View?) {
        drawerLayout = layoutInflater.inflate(R.layout.activity_drawer_base, null) as DrawerLayout
        val container = drawerLayout!!.findViewById<FrameLayout>(R.id.activityContainer)
        container.addView(view)
        super.setContentView(drawerLayout)
        val toolbar = drawerLayout!!.findViewById<Toolbar>(R.id.toolBar)
        setSupportActionBar(toolbar)
        val navigationView = drawerLayout!!.findViewById<NavigationView>(R.id.nav_view)
        navigationView.setNavigationItemSelectedListener(this)
        val toggle = ActionBarDrawerToggle(
            this,
            drawerLayout,
            toolbar,
            R.string.menu_drawer_open,
            R.string.menu_drawer_open
        )
        drawerLayout!!.addDrawerListener(toggle)
        toggle.syncState()
    }

    override fun onNavigationItemSelected(item: MenuItem): Boolean {
        return false
    }

    private fun allocateActivityTitle(titleString: String?) {
        if (supportActionBar != null) {
            supportActionBar!!.title = titleString
        }
    }

    open fun onViewCreated(view: View, savedInstanceState: Bundle?) {}
}

DashboardTmsActivity.kt

package com.cameron.armymaintenance

import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle

class DashboardTmsActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_dashboard_tms)
    }
}
1

There are 1 best solutions below

0
Enowneb On

So there should be 2 errors if I have not misinterpreted:

Modifier 'override' is not applicable to 'local function':19
Unresolved reference: activity:23
  1. onViewCreated() should not be placed inside onCreate(). If you need to implement onViewCreated(), it should be at the same level with onCreate()
  2. activity is not available in an Activity. It only exists in a Fragment class. You can simply use this in an Activity.
class MainActivity : DrawerBaseActivity() {

    private lateinit var binding: ActivityMainBinding

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        binding = ActivityMainBinding.inflate(layoutInflater)
        setContentView(binding.root)
    }
    
    // Move to same level for function
    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
        view.findViewById<CardView>(R.id.card1).setOnClickListener {
            // Use this in Activity
            val card1 = Intent(this@MainActivity, ActivityDashboardTmsBinding::class.java)
            startActivity(card1)
        }
    }
}