将活动与数据库ID相关联

时间:2012-06-17 19:23:01

标签: java android sqlite android-activity

我有一个基于我数据库中的适配器的主ListView。每个数据库ID都通过ListView“分配”到一个Activity。在我的AndroidManifest中,每个活动都有一个带有自定义操作的intent过滤器。现在有了这个,我不得不创建这个类:

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,这将会很麻烦。有没有办法解决这个问题?

1 个答案:

答案 0 :(得分: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可能是这个课程的一个坏名字,我只是不确定你的域名。