2013-05-07 25 views
6

Tôi có lớp sau, SplashActivity.java:Làm một hoạt động chỉ xuất hiện một lần, khi ứng dụng được bắt đầu

public class SplashScreen extends Activity{ 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     // TODO Auto-generated method stub 
     super.onCreate(savedInstanceState); 

     setContentView(R.layout.splash); 
     Thread timer = new Thread(){ 
      public void run(){ 
       try{ 
        sleep(5000); 
       }catch(InterruptedException e) 
       { 
        e.printStackTrace(); 
       } 
       finally{ 
        Intent tutorial = new Intent(SplashScreen.this, TutorialOne.class); 
        startActivity(tutorial); 
       } 

      } 
     }; 
     timer.start(); 
      } 
} 

Tôi muốn hoạt động này để tải một lần duy nhất, khi ứng dụng được cài đặt trước trên thiết bị di động lần đầu tiên. Làm quen với android Tôi có rất ít ý tưởng về điều này. Tôi đọc ở những nơi mà SharedPreferences sẽ được sử dụng, nhưng không hiểu việc triển khai. Và điều về hoạt động này là, hoạt động phải hoạt động như một Launcher khi được sử dụng lần đầu tiên, đó là điều thực sự làm tôi bối rối. Bởi vì trong tệp kê khai tôi tuyên bố một hoạt động khác trong trường hợp của tôi là MainPage.java. Vậy làm thế nào tôi có thể thực hiện logic này ?? Tôi có gọi số SplashActivity trong số MainPage hoặc có điều gì khác phải được thực hiện không? Xin hãy giúp ai đó?

Ai đó có thể viết mã xuống để thực hiện logic này nếu có thể không?

+0

@Pragnani Tôi muốn nó như là một điều một lần ... như nếu ứng dụng được cài đặt trong một thiết bị di động cho lần đầu tiên chỉ sau đó nên màn hình giật gân hiển thị. –

Trả lời

20

Thêm mã này vào phương pháp onCreate của bạn

SharedPreferences pref = getSharedPreferences("ActivityPREF", Context.MODE_PRIVATE); 
    if(pref.getBoolean("activity_executed", false)){ 
     Intent intent = new Intent(this, TutorialOne.class); 
     startActivity(intent); 
     finish(); 
    } else { 
     Editor ed = pref.edit(); 
     ed.putBoolean("activity_executed", true); 
     ed.commit(); 
    } 

SharedPreferences sẽ được giữ mỗi khi bạn thực hiện các ứng dụng trừ khi bạn làm sạch các dữ liệu từ Cài đặt trên Android của bạn. Lần đầu tiên sẽ nhận được giá trị từ một boolean (activity_executed) được lưu trên các sở thích như vậy (ActivityPREF).

Nếu không tìm thấy bất kỳ giá trị nào, giá trị đó sẽ trả về false, vì vậy chúng tôi phải chỉnh sửa tùy chọn và đặt giá trị thành true. Việc thực hiện tiếp theo sẽ khởi chạy hoạt động TutorialOne.

finish() xóa hoạt động hiện tại khỏi lịch sử ngăn xếp, vì vậy không thể quay lại bằng nút quay lại từ TutorialOne.

Về biểu hiện của bạn, bạn có thể đặt actitiy này với

 <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 

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

Mỗi lần ứng dụng được thực hiện sẽ ra mắt hoạt động này, nhưng do setted đúng trên "activity_executed" sẽ bắt đầu một hoạt động mới với startActivity .

+2

Các câu trả lời chỉ có mã thường được tán thành trên SO. Hãy cố gắng giải thích những gì nó làm và tại sao nó hoạt động để OP và những người khác có thể học hỏi từ nó – codeMagic

+0

Điều này làm việc cho tôi! Thx – ymerdrengene

+0

Tôi nhầm lẫn với nhánh khác, tại sao bạn đặt biến thành true khi nó đã đúng? – zdd

0
SharedPreferences pref = getSharedPreferences("ActivityPREF", Context.MODE_PRIVATE); 
    if(pref.getBoolean("activity_executed", false)){ 

} else { 
    Intent intent = new Intent(this, TutorialOne.class); 
    startActivity(intent); 
    finish(); 
    Editor ed = pref.edit(); 
    ed.putBoolean("activity_executed", true); 
    ed.commit(); 
} 

Tôi nghĩ nó phải như thế này.