Je suis nouveau pour écrire du code et m'excuser pour ce que je devine est probablement une question très simple. J'ai suivi Android construire votre première application Guide. Ensuite, j'essaie d'ajouter un écran de lanceur Splash en suivant un certain nombre de tutoriels ( ceci en être l'un d'entre eux ). Lorsque j'exécute l'application dans l'émulateur, il charge si vite que je ne peux pas dire si l'écran de l'éclaboussure fonctionne. Existe-t-il un moyen de ralentir temporairement l'émulateur pour vérifier l'écran des éclaboussures? De plus, l'application se bloque lorsque le bouton d'envoi est cliqué qui n'a pas de sens car la fonction sendMessage
existe dans la MainActivity.
E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.myfirstapp, PID: 9242
Java.lang.IllegalStateException: Could not find method sendMessage(View) in a parent or ancestor Context for Android:onClick attribute defined on view class androidx.appcompat.widget.AppCompatButton with id 'button'
at androidx.appcompat.app.AppCompatViewInflater$DeclaredOnClickListener.resolveMethod(AppCompatViewInflater.Java:436)
at androidx.appcompat.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.Java:393)
at Android.view.View.performClick(View.Java:7125)
at Android.view.View.performClickInternal(View.Java:7102)
at Android.view.View.access$3500(View.Java:801)
at Android.view.View$PerformClick.run(View.Java:27336)
at Android.os.Handler.handleCallback(Handler.Java:883)
at Android.os.Handler.dispatchMessage(Handler.Java:100)
at Android.os.Looper.loop(Looper.Java:214)
at Android.app.ActivityThread.main(ActivityThread.Java:7356)
at Java.lang.reflect.Method.invoke(Native Method)
at com.Android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.Java:492)
at com.Android.internal.os.ZygoteInit.main(ZygoteInit.Java:930)
Je ne sais honnêtement pas ce qui ne va pas ou si l'application est tellement petite qu'un écran de splash ne s'affiche pas. Je ne suis pas non plus sûr de la meilleure façon de partager mon projet ici. Donc, ci-dessous est tout le code.
Androidmanifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:Android="http://schemas.Android.com/apk/res/Android"
package="com.example.myfirstapp">
<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=".SplashActivity"
Android:theme="@style/SplashTheme">
<intent-filter>
<action Android:name="Android.intent.action.MAIN" />
<category Android:name="Android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity Android:name=".DisplayMessageActivity"
Android:parentActivityName=".MainActivity">
<!-- For API 15 -->
<meta-data
Android:name="Android.support.PARENT_ACTIVITY"
Android:value=".MainActivity" />
</activity>
<activity Android:name=".MainActivity">
<intent-filter>
<action Android:name="Android.intent.action.VIEW" />
</intent-filter>
</activity>
</application>
</manifest>
MainAlacit.kt
package com.example.myfirstapp
import Android.content.Intent
import androidx.appcompat.app.AppCompatActivity
import Android.os.Bundle
import Android.view.View
import Android.widget.EditText
const val EXTRA_MESSAGE = "come.example.myfirstapp.MESSAGE"
class MainActivity : AppCompatActivity()
{
override fun onCreate(savedInstanceState: Bundle?)
{
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
}
//Called when user taps Send button
fun sendMessage(view: View)
{
val editText = findViewById<EditText>(R.id.editTextTextPersonName)
val message = editText.text.toString()
val intent = Intent(this, DisplayMessageActivity::class.Java).apply {putExtra(EXTRA_MESSAGE, message)}
startActivity(intent)
}
}
DisplayMessageAactivité
package com.example.myfirstapp
import androidx.appcompat.app.AppCompatActivity
import Android.os.Bundle
import Android.widget.TextView
class DisplayMessageActivity : AppCompatActivity()
{
override fun onCreate(savedInstanceState: Bundle?)
{
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_display_message)
//Get the Intent that started this activity and extract the string
val message = intent.getStringExtra(EXTRA_MESSAGE)
//Capture the layout's TextView and set the string as its text
val text = findViewById<TextView>(R.id.textView).apply {text = message}
}
}
Splashactivité
package com.example.myfirstapp
import Android.os.Bundle
import androidx.appcompat.app.AppCompatActivity
class SplashActivity : AppCompatActivity()
{
override fun onCreate(savedIntanceState: Bundle?)
{
setTheme(R.style.AppTheme)
super.onCreate(savedIntanceState)
setContentView(R.layout.activity_main)
}
}
splash_background.xml dessinable
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:opacity="opaque">
<item Android:drawable="@color/colorPrimary" />
<item>
<bitmap Android:gravity="center" Android:src="@mipmap/ic_launcher" />
</item>
</layer-list>
valeurs styles.xml
<resources>
<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
<!-- Customize your theme here. -->
<item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
<item name="colorAccent">@color/colorAccent</item>
</style>
<!-- Splash Screen theme. -->
<style name="SplashTheme" parent="Theme.AppCompat.NoActionBar">
<item name="Android:windowBackground">@drawable/splash_background</item>
</style>
</resources>
Désolé pour la question du novice, et j'espère que je ne règle aucune règle en l'affrontant, mais j'apprécierais des conseils. Merci!
EDIT - Erreur mise à jour après l'aide de S t
Je pense que votre problème est que vous utilisez la même mise en page pour les deux activités. Définir une mise en page différente pour la splashactivité.