首页 > 解决方案 > Activity是MainFragmentListener的一个实例,是真的吗?

问题描述

我想知道,这怎么可能。
我有带有监听器的 MainActivty 和 MainFragment:MainFragmentListener。
当然,我在 MainActivity 中实现了这个监听器作为接口。
现在我试图理解这一点:

if (context instanceof MainFragmentListener)

总是如此,这怎么可能?MainActivity 不是 MainFragmentListener 的实例。
MainFragmentListener 是一个公正的接口,而不是对象!

主要片段:

@Override
public void onAttach(Context context) {
    super.onAttach(context);
    if (context instanceof MainFragmentListener) {
        mListener = (MainFragment.MainFragmentListener) context;
    } else {
        throw new RuntimeException(context.toString()
                + " must implement OnFragmentInteractionListener");
    }
}

public interface MainFragmentListener {
    void xx();
    void yy();
}

活动:

public class MainActivity extends AppCompatActivity
        implements NavigationView.OnNavigationItemSelectedListener,
        MainFragment.MainFragmentListener{  

public void xx(){
     abc
 };
public void yy(){
abc2
 };

}

标签: javaandroidoopinheritanceinstanceof

解决方案


这是因为instanceof还要检查一个类是否实现了一个接口。您可以阅读文档

instanceof 运算符将对象与指定类型进行比较。您可以使用它来测试对象是类的实例、子类的实例还是实现特定接口的类的实例。

虽然我认为instanceof运营商名称有点误导。


推荐阅读