2012-06-17 90 views
0

我有一個基於我的數據庫中的適配器的主要ListView。每個數據庫ID都通過ListView「分配」給一個Activity。在我的AndroidManifest中,每個活動都有一個意圖過濾器和一個自定義操作。現在有了這個,我不得不創建這個類:關聯活動與數據庫ID

public final class ActivityLauncher { 
    private ActivityLauncher() { } 

    public static void launch(Context c, int id) { 
     switch(id) { 
     case 1: 
      Intent intent = new Intent(); 
      intent.setAction(SomeActivity.ACTION_SOMEACTIVITY); 
      c.startActivity(intent); 
      break; 
     case 2: 
      ... 
      break; 
     ... 
     } 
    } 

    private static void st(Context context, String action) { 
     Intent intent = new Intent(); 
     intent.setAction(action); 
     context.startActivity(intent); 
    } 
} 

所以,我必須手動創建switch語句的新情況。如果我不得不重新排列或刪除一個id,這會很麻煩。有什麼辦法可以解決這個問題嗎?

回答

0

我不完全確定你的推理,但這裏有一個平底船。製作一個封裝你想要的行爲的對象。

public class User { 
    private static final User[] users = new User[2]; 
    static { 
     user[0] = new User(0, "Action_0"); 
     user[1] = new User(1, "Action_1"); 
    } 

    private final int id; 
    private final String action; 

    public User(int id, String action){ 
      this.id = id; 
      this.action = action; 
    } 

    public int getId(){ 
      return this.id; 
    } 

    public Intent getIntent(){ 
      Intent intent = new Intent(); 
      intent.setAction(this.action); 
      return intent; 
    } 

    public static User getUser(int id){ 
     for(int i=0; i < users.length; i++){ 
      User user = user[i]; 
      if(id == user.getId()){ 
       return user; 
      } 
     } 
     throw new Resources.NotFoundException("User not found with id: "+id); 
    } 

} 

這樣,就要在你的活動,你可以有:

public void launch(Context c, int id) { 
     Intent intent = User.getUser(id).getIntent(); 
     c.startActivity(intent); 
} 

或沿着這些線路的東西,你會這樣進一步擴展,並通過圓「User」的對象,而不是你的原始ID。您也可以將上下文傳遞給getIntent方法,並將其更改爲'start'方法。 User可能是該課程的一個糟糕名稱,我只能確定您的網域。