飞溅后未显示主要活动

时间:2018-07-19 17:12:42

标签: android kotlin

这是我的代码。启动屏幕后,主要活动将不会运行 并没有出现错误。 这是带有导航抽屉的选项卡式活动。 可能是什么问题? 我尝试了几次。  我尝试在应用程序中执行其他活动以使其成功运行,但无法与主要活动配合使用。 请帮助我。

====

启动画面

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>

请告诉我怎么做

谢谢!

3 个答案:

答案 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);
    }

}