这是我的代码。启动屏幕后,主要活动将不会运行 并没有出现错误。 这是带有导航抽屉的选项卡式活动。 可能是什么问题? 我尝试了几次。 我尝试在应用程序中执行其他活动以使其成功运行,但无法与主要活动配合使用。 请帮助我。
====
启动画面
package com.mohanadmarket.myapplication50
import android.content.Intent
import android.support.v7.app.AppCompatActivity
import android.os.Bundle
import java.util.*
class SplashActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_splash)
Timer().schedule(object : TimerTask(){
override fun run() {
val intent= Intent(this@SplashActivity,MainActivity::class.java)
startActivity(intent)
finish()
}
},5000L)
}
}
维护
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.mohanadmarket.myapplication50">
<application
android:allowBackup="true"
android:icon="@mipmap/sudacars_icon"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity
android:name=".SplashActivity"
android:label="@string/app_name"
android:theme="@style/AppTheme.NoActionBar">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android:name=".MainActivity"
android:label="@string/app_name"
android:launchMode="singleInstance" />
</application>
</manifest>
请告诉我怎么做
谢谢!
答案 0 :(得分:0)
您的代码似乎正常。但是另一种解决方案是使用Handler
:
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
startActivity(new Intent(SplashActivity.this, MainActivity.class));
}
}, 5000);
答案 1 :(得分:0)
问题是您正在尝试从后台线程启动活动。因此,您要做的是在UI线程上启动活动。
替换此代码:
Timer().schedule(object : TimerTask(){
override fun run() {
val intent= Intent(this@SplashActivity,MainActivity::class.java)
startActivity(intent)
finish()
}
},5000L)
与
Timer().schedule(object : TimerTask(){
override fun run() {
Handler(Looper.getMainLooper()).post({
val intent= Intent(this@SplashActivity,MainActivity::class.java)
startActivity(intent)
finish()
})
}
}
或者您可以将
与Timer
一起删除
Handler(Looper.getMainLooper()).postDelayed({
val intent= Intent(this@SplashActivity,MainActivity::class.java)
startActivity(intent)
finish()
}, 5000L)
答案 2 :(得分:0)
也许您可以选择其他方式。我见过的大多数开发人员都这样做:
import javafx.animation.PauseTransition;
import javafx.application.Application;
import javafx.concurrent.Task;
import javafx.event.ActionEvent;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.ProgressBar;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;
import javafx.util.Duration;
/**
*
* @author blj0011
*/
public class JavaFXApplication222 extends Application
{
@Override
public void start(Stage primaryStage)
{
VBox root = new VBox();
ProgressBar bar = new ProgressBar();
bar.setVisible(false);
Task task = new Task<Void>()
{
@Override
public Void call()
{
int max = 1000000000;
for (int i = 1; i <= max; i++) {
if (isCancelled()) {
break;
}
updateProgress(i, max);
}
return null;
}
};
task.setOnSucceeded((event) -> {
if (bar.isVisible()) {
bar.setVisible(false);
}
});
bar.progressProperty().bind(task.progressProperty());
Button btn = new Button();
btn.setText("Say 'Hello World'");
btn.setOnAction((ActionEvent event) -> {
PauseTransition wait = new PauseTransition(Duration.seconds(10));//Wait 10 seconds after the Button is pressed to show the ProgressBar
new Thread(task).start();
wait.setOnFinished((e) -> {
/*YOUR METHOD*/
bar.setVisible(true);
wait.playFromStart();
});
wait.play();
});
root.getChildren().addAll(btn, bar);
Scene scene = new Scene(root, 300, 250);
primaryStage.setTitle("Hello World!");
primaryStage.setScene(scene);
primaryStage.show();
}
/**
* @param args the command line arguments
*/
public static void main(String[] args)
{
launch(args);
}
}