我有一个基于我数据库中的适配器的主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,这将会很麻烦。有没有办法解决这个问题?
答案 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
可能是这个课程的一个坏名字,我只是不确定你的域名。