当前位置:  开发笔记 > 前端 > 正文

有没有办法避免在Android中使用instanceOf?

如何解决《有没有办法避免在Android中使用instanceOf?》经验,为你挑选了1个好方法。

我们都同意使用instanceOf通常不是最好的解决方案.网上有很多例子.

但是让我们考虑一下以下示例,我们需要从一个片段调用一个方法到它的活动:

public class BaseActvity extends FragmentActivity implements ISomething {
    @Override
    public void doSomething();
}

然后假设我们在应用程序中有一个需要调用的片段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();
}

如您所见,我们无法保证getActivity()将返回ISomething的对象,因此我们检查类型.一个改进是添加一个接口,但我们仍然要检查getActvity()返回类型以保护我们的代码.

由于Android Framework和getActivity()调用的性质,我找不到更好的解决方案.也许有人可以帮助一些输入..

注意:我添加了一个界面来跟随访问者模式.请注意,我仍然必须使用instanceOf来确保父活动正在实现它.

谢谢 .

Gaspar de Elais



1> Larry Schief..:

你是对的,最好在你的界面中定义一个接口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");
        }
    }
}

事实上,这是FragmentAndroid主开发者网站上此页面中推荐/描述的内容:http://developer.android.com/training/basics/fragments/communicating.html

推荐阅读
U友50081205_653
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有