Android - Получение нулевого указателя при запуске активности из внешнего модуля приложения - PullRequest
0 голосов
/ 29 января 2020

У меня есть приложение, которое пытается открыть основное действие из библиотеки / модуля, который я создал, и я получаю следующую ошибку:

java.lang.RuntimeException: Unable to start activity ComponentInfo java.lang.IllegalStateException: findViewById(R.id.toolbar) must not be null

Чтобы импортировать модуль, я создал новый модуль, выбрал файл .aar, добавил зависимость в gradle как

implementation project(path: ':test-module')

В проекте моего модуля я использую apply plugin: 'com.android.library' и удалил идентификатор приложения в файле gradle.

Я реализовал класс, который обрабатывает навигацию к активности внутри модуля:

class Navigator(){

    fun navigateToMainActivity(context: Context){
        val intent  = Intent(context,DrawerActivity::class.java)
        context.startActivity(intent)
    }

    companion object{
        fun newInstance(): Navigator = Navigator()
    }
}

Моя активность внутри модуля выглядит следующим образом:

class DrawerActivity : AppCompatActivity() {

private lateinit var appBarConfiguration: AppBarConfiguration

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_main)
    val toolbar: Toolbar = findViewById(R.id.toolbar)
    setSupportActionBar(toolbar)

    val drawerLayout: DrawerLayout = findViewById(R.id.drawer_layout)
    val navView: NavigationView = findViewById(R.id.nav_view)
    val navController = findNavController(R.id.nav_host_fragment)

    appBarConfiguration = AppBarConfiguration(
        setOf(
            R.id.nav_home, R.id.nav_gallery, R.id.nav_slideshow,
            R.id.nav_tools, R.id.nav_share, R.id.nav_send
        ), drawerLayout
    )
    setupActionBarWithNavController(navController, appBarConfiguration)
    navView.setupWithNavController(navController)
}

override fun onCreateOptionsMenu(menu: Menu): Boolean {
    menuInflater.inflate(R.menu.main, menu)
    return true
}

override fun onSupportNavigateUp(): Boolean {
    val navController = findNavController(R.id.nav_host_fragment)
    return navController.navigateUp(appBarConfiguration) || super.onSupportNavigateUp()
}

}

манифест модуля:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.shadows.mydrawer">

<application
    android:allowBackup="true"
    android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name"
    android:roundIcon="@mipmap/ic_launcher_round"
    android:supportsRtl="true"
    android:theme="@style/AppTheme">
    <activity
        android:name=".DrawerActivity"
        android:label="@string/app_name"
        android:theme="@style/AppTheme.NoActionBar">
        <intent-filter>
            <action android:name="com.example.main.mainactivity" />
            <category android:name="android.intent.category.DEFAULT" />
        </intent-filter>
    </activity>
</application>

И я вызываю новую активность (DrawerActivity) в моем приложении так:

Navigator.newInstance().navigateToMainActivity(this)

Я также пытался вызвать действие, создав намерение для приложения и запустив его с помощью диспетчера пакетов или с Intent(this, DrawerActivity::class.java) в качестве намерения, но я все еще получаю ту же ошибку

java.lang.RuntimeException: Unable to start activity ComponentInfo java.lang.IllegalStateException: findViewById(R.id.toolbar) must not be null

Спасибо всем заранее за помощь :)

Обновление:

Эта ошибка произошла из-за того, что макеты моего модуля имели то же имя, что и макеты моего приложения. Как только я сменил имя, все работало отлично.

1 Ответ

0 голосов
/ 30 января 2020

Эта ошибка произошла из-за того, что макеты моего модуля имели то же имя, что и макеты моего приложения. Как только я сменил имя, все работало отлично.

...