2017-09-05 44 views
0

我做了一个ActivitySplash,效果很好。 然后我做了一个ActivityIntro也能正常工作。 当我第一次打开应用程序时,我看到了介绍,然后看到了ActivityMain。 但在其他时候,应用程序直接转到ActivityMain。 我想拥有他们两个。第一次是ActivityIntro,然后是ActityMain。 为其他时间首先ActivitySplash然后ActivityMain。 你能帮我吗?我如何拥有飞溅活动和介绍活动?

我AndroidManifest:

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

 
    <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=".ActivitySplash" 
 
      android:theme="@style/Theme.AppCompat.NoActionBar"> 
 
     </activity> 
 

 
     <activity android:name=".ActivityMain" /> 
 

 
     <activity android:name=".ActivityIntro"> 
 
      <intent-filter> 
 
       <action android:name="android.intent.action.MAIN" /> 
 
       <category android:name="android.intent.category.LAUNCHER" /> 
 
      </intent-filter> 
 
     </activity> 
 

 
    </application> 
 

 
</manifest>

我ActivitySplash:

import android.content.Intent; 
 
import android.os.Handler; 
 
import android.support.v7.app.AppCompatActivity; 
 
import android.os.Bundle; 
 

 
public class ActivitySplash extends AppCompatActivity { 
 

 
    @Override 
 
    protected void onCreate(Bundle savedInstanceState) { 
 
     super.onCreate(savedInstanceState); 
 
     setContentView(R.layout.activity_splash); 
 

 
     new Handler().postDelayed(new Runnable() { 
 
      @Override 
 
      public void run() { 
 
       Intent i = new Intent(ActivitySplash.this, ActivityMain.class); 
 
       startActivity(i); 
 
       finish(); 
 
      } 
 
     },2500); 
 
    } 
 
}

我ActivityIntro:

import android.content.Context; 
 
import android.content.Intent; 
 
import android.graphics.Color; 
 
import android.os.Build; 
 
import android.os.Bundle; 
 
import android.support.v4.view.PagerAdapter; 
 
import android.support.v4.view.ViewPager; 
 
import android.support.v7.app.AppCompatActivity; 
 
import android.text.Html; 
 
import android.view.LayoutInflater; 
 
import android.view.View; 
 
import android.view.ViewGroup; 
 
import android.view.Window; 
 
import android.view.WindowManager; 
 
import android.widget.Button; 
 
import android.widget.LinearLayout; 
 
import android.widget.TextView; 
 

 
public class ActivityIntro extends AppCompatActivity { 
 

 
    private ViewPager viewPager; 
 
    private MyViewPagerAdapter myViewPagerAdapter; 
 
    private LinearLayout dotsLayout; 
 
    private TextView[] dots; 
 
    private int[] layouts; 
 
    private Button btnSkip, btnNext; 
 
    private PrefManager prefManager; 
 

 
    @Override 
 
    protected void onCreate(Bundle savedInstanceState) { 
 
     super.onCreate(savedInstanceState); 
 

 
     // Checking for first time launch - before calling setContentView() 
 
     prefManager = new PrefManager(this); 
 
     if (!prefManager.isFirstTimeLaunch()) { 
 
      launchHomeScreen(); 
 
      finish(); 
 
     } 
 

 
     // Making notification bar transparent 
 
     if (Build.VERSION.SDK_INT >= 21) { 
 
      getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_STABLE | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN); 
 
     } 
 

 
     setContentView(R.layout.activity_intro); 
 

 
     viewPager = (ViewPager) findViewById(R.id.view_pager); 
 
     dotsLayout = (LinearLayout) findViewById(R.id.layoutDots); 
 
     btnSkip = (Button) findViewById(R.id.btn_skip); 
 
     btnNext = (Button) findViewById(R.id.btn_next); 
 

 

 
     // layouts of all welcome sliders 
 
     // add few more layouts if you want 
 
     layouts = new int[]{ 
 
       R.layout.intro_slide1, 
 
       R.layout.intro_slide2, 
 
       R.layout.intro_slide3, 
 
       R.layout.intro_slide4}; 
 

 
     // adding bottom dots 
 
     addBottomDots(0); 
 

 
     // making notification bar transparent 
 
     changeStatusBarColor(); 
 

 
     myViewPagerAdapter = new MyViewPagerAdapter(); 
 
     viewPager.setAdapter(myViewPagerAdapter); 
 
     viewPager.addOnPageChangeListener(viewPagerPageChangeListener); 
 

 
     btnSkip.setOnClickListener(new View.OnClickListener() { 
 
      @Override 
 
      public void onClick(View v) { 
 
       launchHomeScreen(); 
 
      } 
 
     }); 
 

 
     btnNext.setOnClickListener(new View.OnClickListener() { 
 
      @Override 
 
      public void onClick(View v) { 
 
       // checking for last page 
 
       // if last page home screen will be launched 
 
       int current = getItem(+1); 
 
       if (current < layouts.length) { 
 
        // move to next screen 
 
        viewPager.setCurrentItem(current); 
 
       } else { 
 
        launchHomeScreen(); 
 
       } 
 
      } 
 
     }); 
 
    } 
 

 
    private void addBottomDots(int currentPage) { 
 
     dots = new TextView[layouts.length]; 
 

 
     int[] colorsActive = getResources().getIntArray(R.array.array_dot_active); 
 
     int[] colorsInactive = getResources().getIntArray(R.array.array_dot_inactive); 
 

 
     dotsLayout.removeAllViews(); 
 
     for (int i = 0; i < dots.length; i++) { 
 
      dots[i] = new TextView(this); 
 
      dots[i].setText(Html.fromHtml("&#8226;")); 
 
      dots[i].setTextSize(35); 
 
      dots[i].setTextColor(colorsInactive[currentPage]); 
 
      dotsLayout.addView(dots[i]); 
 
     } 
 

 
     if (dots.length > 0) 
 
      dots[currentPage].setTextColor(colorsActive[currentPage]); 
 
    } 
 

 
    private int getItem(int i) { 
 
     return viewPager.getCurrentItem() + i; 
 
    } 
 

 
    private void launchHomeScreen() { 
 
     prefManager.setFirstTimeLaunch(false); 
 
     startActivity(new Intent(ActivityIntro.this, ActivityMain.class)); 
 
     finish(); 
 
    } 
 

 
    // viewpager change listener 
 
    ViewPager.OnPageChangeListener viewPagerPageChangeListener = new ViewPager.OnPageChangeListener() { 
 

 
     @Override 
 
     public void onPageSelected(int position) { 
 
      addBottomDots(position); 
 

 
      // changing the next button text 'NEXT'/'GOT IT' 
 
      if (position == layouts.length - 1) { 
 
       // last page. make button text to GOT IT 
 
       btnNext.setText(getString(R.string.start)); 
 
       btnSkip.setVisibility(View.GONE); 
 
      } else { 
 
       // still pages are left 
 
       btnNext.setText(getString(R.string.next)); 
 
       btnSkip.setVisibility(View.VISIBLE); 
 
      } 
 
     } 
 

 
     @Override 
 
     public void onPageScrolled(int arg0, float arg1, int arg2) { 
 

 
     } 
 

 
     @Override 
 
     public void onPageScrollStateChanged(int arg0) { 
 

 
     } 
 
    }; 
 

 
    /** 
 
    * Making notification bar transparent 
 
    */ 
 
    private void changeStatusBarColor() { 
 
     if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { 
 
      Window window = getWindow(); 
 
      window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS); 
 
      window.setStatusBarColor(Color.TRANSPARENT); 
 
     } 
 
    } 
 

 
    /** 
 
    * View pager adapter 
 
    */ 
 
    public class MyViewPagerAdapter extends PagerAdapter { 
 
     private LayoutInflater layoutInflater; 
 

 
     public MyViewPagerAdapter() { 
 
     } 
 

 
     @Override 
 
     public Object instantiateItem(ViewGroup container, int position) { 
 
      layoutInflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
 

 
      View view = layoutInflater.inflate(layouts[position], container, false); 
 
      container.addView(view); 
 

 
      return view; 
 
     } 
 

 
     @Override 
 
     public int getCount() { 
 
      return layouts.length; 
 
     } 
 

 
     @Override 
 
     public boolean isViewFromObject(View view, Object obj) { 
 
      return view == obj; 
 
     } 
 

 

 
     @Override 
 
     public void destroyItem(ViewGroup container, int position, Object object) { 
 
      View view = (View) object; 
 
      container.removeView(view); 
 
     } 
 
    } 
 
}

+1

你为什么不从ActivityIntro调用SplashActivity?你应该从Splash而不是ActivityIntro调用MainActivity。 – Payal

+0

是的,这种方式将工作,但第一次我不想有两个 –

+0

确切,ActivityIntro将直接调用ActivityMain第一次,和它的时间它会打电话给ActivitySplash。您只需在ActivityIntro中更改方法调用即可调用ActivitySplash而不是ActivityMain。 – Payal

回答

0

我假设你想显示ActivityIntro只有一次。所以,你可以这样做:

更改舱单这样:

<activity android:name=".SplashActivity" > 
<intent-filter> 
    <action android:name="android.intent.action.MAIN" /> 
    <category android:name="android.intent.category.LAUNCHER" /> 
</intent-filter> 

在你飞溅行为使用此:

private Boolean firstTime = null; 



    new Handler().postDelayed(new Runnable() { 


     @Override 
     public void run() { 

      if (isFirstTime()){ 
       Intent intent = new Intent(SplashScreenActivity.this,ActivityIntro.class); 
       startActivity(intent); 
      } 
      else { 
       Intent intent = new Intent(SplashScreenActivity.this,MainActivity.class); 
       startActivity(intent); 
      } 

      // close this activity 
      finish(); 
     } 
    }, 2500); 

创建一个在你的SplashActivity称为isFirstTime这样的方法:

private boolean isFirstTime(){ 
    if (firstTime == null){ 
     SharedPreferences sharedPreferences = this.getSharedPreferences("first_time", Context.MODE_PRIVATE); 
     firstTime = sharedPreferences.getBoolean("firstTime",true); 
     if(firstTime){ 
      SharedPreferences.Editor editor = sharedPreferences.edit(); 
      editor.putBoolean("firstTime",false); 
      editor.commit(); 
     } 
    } 
    return firstTime; 
}