2016-06-23 3 views
1

SplashScreen 이후 MainActivity.java으로 전화 하시겠습니까?스플래시 화면 후 MainActivity를 호출하십시오.

코드가 올바르게 컴파일되지만 Splash 이후 Main을 호출하지 않으면 단순히 닫힙니다.

AndroidManifest.xml에서 MainActivity가 아니라 SplashScreen을 호출하면 효과가 있습니까?

매니페스트 :

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    package="com.example.stark.hello_world"> 

    <application 
     android:allowBackup="true" 
     android:icon="@mipmap/ic_launcher" 
     android:label="@string/app_name" 
     android:supportsRtl="true" 
     android:theme="@style/AppTheme"> 

     <activity 
      android:name=".Splashscreen" 
      android:label="@string/app_name" > 
      <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:theme="@style/AppTheme.NoActionBar"> 
      <intent-filter> 
       <action android:name="android.intent.action.MAIN" /> 

       <category android:name="android.intent.category.LAUNCHER" /> 
      </intent-filter> 
     </activity> 
    </application> 

</manifest> 

스플래시 스크린 :

package com.example.stark.hello_world; 
import android.app.Activity; 
import android.content.Intent; 
import android.graphics.PixelFormat; 
import android.os.Bundle; 
import android.view.Window; 
import android.view.animation.Animation; 
import android.view.animation.AnimationUtils; 
import android.widget.ImageView; 
import android.widget.LinearLayout; 

/** 
* Created by Stark on 22/06/2016. 
*/ 
public class Splashscreen extends Activity { 

    public void onAttachedToWindow() { 
     super.onAttachedToWindow(); 
     Window window = getWindow(); 
     window.setFormat(PixelFormat.RGBA_8888); 
    } 
    /** Called when the activity is first created. */ 
    Thread splashTread; 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_splashscreen); 
     StartAnimations(); 
    } 
    private void StartAnimations() { 
     Animation anim = AnimationUtils.loadAnimation(this, R.anim.alpha); 
     anim.reset(); 
     LinearLayout l=(LinearLayout) findViewById(R.id.lin_lay); 
     l.clearAnimation(); 
     l.startAnimation(anim); 

     anim = AnimationUtils.loadAnimation(this, R.anim.translate); 
     anim.reset(); 
     ImageView iv = (ImageView) findViewById(R.id.splash); 
     iv.clearAnimation(); 
     iv.startAnimation(anim); 

     splashTread = new Thread() { 
      @Override 
      public void run() { 
       try { 
        int waited = 0; 
        // Splash screen pause time 
        while (waited < 3500) { 
         sleep(100); 
         waited += 100; 
        } 
        Intent intent = new Intent(Splashscreen.this,MainActivity.class); 
        intent.setFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION); 
        Splashscreen.this.finish(); 

       } catch (InterruptedException e) { 
        // do nothing 
       } finally { 
        Splashscreen.this.finish(); 
       } 

      } 
     }; 
     splashTread.start(); 

    } 

} 

홈페이지 :

package com.example.stark.hello_world; 

import android.os.Bundle; 
import android.support.design.widget.FloatingActionButton; 
import android.support.design.widget.Snackbar; 
import android.view.View; 
import android.support.design.widget.NavigationView; 
import android.support.v4.view.GravityCompat; 
import android.support.v4.widget.DrawerLayout; 
import android.support.v7.app.ActionBarDrawerToggle; 
import android.support.v7.app.AppCompatActivity; 
import android.support.v7.widget.Toolbar; 
import android.view.Menu; 
import android.view.MenuItem; 


public class MainActivity extends AppCompatActivity 
     implements NavigationView.OnNavigationItemSelectedListener { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 
     setSupportActionBar(toolbar); 

     FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab); 
     fab.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG) 
         .setAction("Action", null).show(); 
      } 
     }); 

     DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout); 
     ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(
       this, drawer, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close); 
     drawer.setDrawerListener(toggle); 
     toggle.syncState(); 

     NavigationView navigationView = (NavigationView) findViewById(R.id.nav_view); 
     navigationView.setNavigationItemSelectedListener(this); 
    } 

    @Override 
    public void onBackPressed() { 
     DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout); 
     if (drawer.isDrawerOpen(GravityCompat.START)) { 
      drawer.closeDrawer(GravityCompat.START); 
     } else { 
      super.onBackPressed(); 
     } 
    } 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     // Inflate the menu; this adds items to the action bar if it is present. 
     getMenuInflater().inflate(R.menu.main, menu); 
     return true; 
    } 

    @Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
     // Handle action bar item clicks here. The action bar will 
     // automatically handle clicks on the Home/Up button, so long 
     // as you specify a parent activity in AndroidManifest.xml. 
     int id = item.getItemId(); 

     //noinspection SimplifiableIfStatement 
     if (id == R.id.action_settings) { 
      return true; 
     } 

     return super.onOptionsItemSelected(item); 
    } 

    @SuppressWarnings("StatementWithEmptyBody") 
    @Override 
    public boolean onNavigationItemSelected(MenuItem item) { 
     // Handle navigation view item clicks here. 
     int id = item.getItemId(); 

     if (id == R.id.nav_camera) { 
      // Handle the camera action 
     } else if (id == R.id.nav_gallery) { 

     } else if (id == R.id.nav_slideshow) { 

     } else if (id == R.id.nav_manage) { 

     } else if (id == R.id.nav_share) { 

     } else if (id == R.id.nav_send) { 

     } 

     DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout); 
     drawer.closeDrawer(GravityCompat.START); 
     return true; 
    } 
} 

답변

3

당신은 스플래시 스크린을 마쳤지 만, MainActivity는 시작하지 않았습니다. 그것과 같은 startActivity (intent)를 추가하십시오;

Intent intent = new Intent(Splashscreen.this,MainActivity.class); 
intent.setFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION); 
startActivity(intent); // Add this 
Splashscreen.this.finish(); 
1

당신은 선언하지 않은 MainActivit AndroidManifest 파일의 y. 일단 거기에 추가하면 작동합니다.

+0

그것은 다른 활동을 포함하고 응용 프로그램을 닫은 후 아직 스플래시 스크린 :(나는 당신의되는 SplashScreen에서 여기 –

+1

을 코드를 업데이트합니다, 당신은 startActivity를 방법이라고하지 않았습니다. 당신이 확인할 수 있습니다. 또한, Splashscreen.this .finish();이 줄은 try와 finally 모두로 쓰여졌 고, try가 호출되면 try가 예외를 던질 것입니다. 여전히 해결되지 않으면 logcat 응답을 게시하십시오. 원인에 대해 더 잘 알 수 있습니다. – Ani