2011-06-27 29 views
7

Ứng dụng của tôi được tạo thành bởi một vài hoạt động.Xác định Hoạt động Mặc định (khi bắt đầu ứng dụng) theo lập trình

Hoạt động A là menu chính của tôi với một số biểu tượng. Hoạt động này có thể khởi chạy tùy thuộc vào biểu tượng bạn nhấn: Hoạt động B, C, D, E hoặc F.

Thật tốt và thực sự dễ dàng, Hoạt động A là mặc định.

Bây giờ, tôi đã thực hiện tùy chọn ưu tiên cho phép người dùng bắt đầu hoạt động yêu thích của họ.

Một số người dùng trên thực tế muốn trực tiếp tham gia Hoạt động B.

Cách duy nhất tôi tìm thấy một giải pháp là để làm điều này trong Hoạt động Một giải pháp này là rất xấu xí vì Hoạt động A sẽ luôn khởi động và tự động đóng lại:

public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    settings = PreferenceManager 
      .getDefaultSharedPreferences(getBaseContext()); 
    final Intent intent = getIntent(); 
    String action = intent.getAction(); 

    if (Intent.ACTION_MAIN.equals(action)) { 
     switch (Integer.valueOf(settings.getString("Activitypref", "1"))) { 
     case 2: 
      Intent i = new Intent(ActivityA.this, ActivityB.class); 
      finish(); 
      startActivity(i); 
      break; 
     case 3: 
      i = new Intent(ActivityA.this, ActivityC.class); 
      finish(); 
      startActivity(i); 
      break; 
     case 4: 
      i = new Intent(ActivityA.this, ActivityD.class); 
      finish(); 
      startActivity(i); 
      break; 
     case 5: 
      i = new Intent(ActivityA.this, ActivityE.class); 
      finish(); 
      startActivity(i); 
      break; 
     case 6: 
      i = new Intent(ActivityA.this, ActivityF.class); 
      finish(); 
      startActivity(i); 
      break; 
     default: 
      break; 
     } 
    } 
+1

Nếu mục đích duy nhất của Hoạt động A là quyết định hoạt động nào khác sẽ khởi chạy, thì tôi không coi đây là giải pháp xấu. Có vẻ như Hoạt động A đang thực hiện công việc của mình. – DeeV

+0

Có, nhưng người dùng có thể chọn "bỏ qua" hoạt động này và trực tiếp đến Hoạt động X. Khi được đặt thành tùy chọn, tôi không muốn Hoạt động A được khởi chạy trừ khi người dùng nhấn nút Trang chủ của tôi, sau khi đã thích Hoạt động X. –

+0

Công cụ gây phiền nhiễu nhất là thời gian tải và màn hình nhấp nháy whan bắt đầu Hoạt động A và đóng nó vào "onCreate" –

Trả lời

8

Thay vì ActivityA, xem xét sử dụng hoạt động wrapper được được gọi từ trình khởi chạy. Bạn sẽ loại bỏ nhu cầu kiểm tra ACTION_MAIN. Ngoài ra, bạn có thể lưu trữ tên hoạt động mục tiêu trong sở thích và sử dụng nó để trực tiếp bắt đầu hoạt động mục tiêu của bạn qua chữ ký ý định khác nhau:

public Intent (String action) 

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

<activity class=".ActivityA" android:label="..."> 
      <intent-filter> 
       <action android:name="mypackage.ActivityA" />      
      </intent-filter> 
</activity> 

Và trong startActivity

public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    settings = PreferenceManager 
      .getDefaultSharedPreferences(getBaseContext()); 

    String action = settings.getString("Activitypref","mypackage.ActivityA"); 
    Intent intent = new Intent(action); 
    startActivity(intent); 
    .... 
} 

Bạn có thể cần phải fiddle xung quanh chút ít để làm cho nó đúng.

+0

Xin chào ALEX, giải pháp của bạn có vẻ chính xác những gì tôi đang tìm kiếm, nhưng thật không may, tôi không hiểu ý bạn là gì .. Tôi cảm thấy một chút ngu ngốc, nhưng bạn có một đoạn nhỏ hay ví dụ? –

+0

Tôi đã thêm bản cập nhật. Tôi không có quyền truy cập vào mã Android của mình ngay bây giờ, vì vậy bạn có thể cần phải giải quyết nó để làm đúng. –

+1

Câu trả lời là tuyệt vời nhưng wripper của bạn giống như ACtivity trước đây của tôi A và làm cho màn hình nhấp nháy một chút (StartActivity được đưa ra sau đó ACtivityA) sau đó, tôi cũng cần phải hoàn thành nó, đó là khá giống nhau trước đó, trên thực tế .. –

Các vấn đề liên quan