是否可以将 Class 类型放在 Bundle 中?
public static <T> Intent newInstance(Class<T> EventClass) {
Bundle args = new Bundle();
args.putXXXX(EventClass);
Intent intent = new Intent(MyApplication.getInstance(), MyActivity.class);
intent.putExtras(args);
return intent;
}
Run Code Online (Sandbox Code Playgroud)
谢谢你们 !
你可以简单地使用 Class<T>.getCanonicalName()从 Bundle 中读取该类时,该名称然后实例化该类。
例如,如果您想在要使用的单例类的 Android 组件之间进行通信,则该场景是有意义的。
例如,您可以有一个操作界面
public interface Action {
void run(List<String> args, Context context);
}
Run Code Online (Sandbox Code Playgroud)
应该在 Fragment 中执行特定任务,并且您希望使用不同的操作集初始化 Fragments。然后你的 Fragment 的实例化方法可以简单地将Action类作为参数:
public static void newInstance(String someParameter, Class<? extends Action>... actions) {
Bundle arguments = new Bundle();
String[] actionNames = new String[actions.length];
for (int i = 0; i < actionNames.length; i++) {
actionNames[i] = actions[i].getCanonicalName();
}
arguments.putStringArray(ARG_ACTIONS, actionNames);
}
Run Code Online (Sandbox Code Playgroud)
定义了一些类后MyActionA implements Action,MyActionB implements Action您将通过以下方式使用这些操作创建 Fragment:
Fragment myFragment = MyFragment.newInstance("some parameter", MyActionA.class, MyActionB.class)
Run Code Online (Sandbox Code Playgroud)
Fragment 本身可以使用一系列动作 ( List<Action> action) 作为从 Bundle 初始化的成员变量onCreate():
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
for (String actionName : getArguments().getStringArray(ARG_ACTIONS)) {
try {
Class<? extends Action> actionClass = (Class<? extends Action>) Class.forName(actionName);
Action action = actionClass.newInstance();
actions.put(action.getName(), action);
} catch (java.lang.InstantiationException e) {
throw new RuntimeException(e);
} catch (IllegalAccessException e) {
throw new RuntimeException(e);
} catch (ClassNotFoundException e) {
throw new RuntimeException(e);
}
}
}
Run Code Online (Sandbox Code Playgroud)
顺便说一下,当尝试将匿名类实例化为匿名类的getCanonicalName()返回值时null,匿名类会失败。所以这个方法不能用于传递匿名类,我怀疑这根本不可能。
不可能将任何对象放入捆绑包中。您只能将两种类型的类放入一个包中:那些实现Serializable或 的类Parcelable。
| 归档时间: |
|
| 查看次数: |
6872 次 |
| 最近记录: |