Gas*_*ias 2 android instanceof
我们都同意使用instanceOf通常不是最好的解决方案.网上有很多例子.
但是让我们考虑一下以下示例,我们需要从一个片段调用一个方法到它的活动:
public class BaseActvity extends FragmentActivity implements ISomething {
@Override
public void doSomething();
}
Run Code Online (Sandbox Code Playgroud)
然后假设我们在应用程序中有一个需要调用的片段doSomething():
public MyFragment extends Fragment() {
public void onCreate() {
public void onResume() {
Activity activity = getActivity();
if (activity != null && activity instanceOf ISomething) {
ISomething something = (ISomething) activity;
something.doSomething();
}
}
}
public interface ISomething {
void doSomething();
}
Run Code Online (Sandbox Code Playgroud)
如您所见,我们无法保证getActivity()将返回ISomething的对象,因此我们检查类型.一个改进是添加一个接口,但我们仍然要检查getActvity()返回类型以保护我们的代码.
由于Android Framework和getActivity()调用的性质,我找不到更好的解决方案.也许有人可以帮助一些输入..
注意:我添加了一个界面来跟随访问者模式.请注意,我仍然必须使用instanceOf来确保父活动正在实现它.
谢谢 .
Gaspar de Elais
你是对的,最好在你的界面中定义一个接口Fragment并要求Activity实现它.然后,在onAttach()你的演员阵容中,你投入Activitya接口try/catch,如果它抛出ClassCastException你可以抛出你自己的异常.
public MyFragment extends Fragment {
private Callback mCallback;
public interface Callback {
void doSomething();
}
...
@Override
public void onAttach(Activity activity) {
try {
mCallback = (Callback)activity;
} catch (ClassCastException e) {
throw new IllegalArgumentException("Activity must implement Callback");
}
}
}
Run Code Online (Sandbox Code Playgroud)
事实上,这是FragmentAndroid主开发者网站上此页面中推荐/描述的内容:http://developer.android.com/training/basics/fragments/communicating.html
| 归档时间: |
|
| 查看次数: |
480 次 |
| 最近记录: |