【发布时间】:2018-05-27 13:38:30
【问题描述】:
我想知道,这怎么可能。
我有带有监听器的 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
};
}
【问题讨论】:
-
instanceof检查所有继承的类型,而不仅仅是类。 -
反正Activity在层次结构中比fragment接口高
-
另外
context在这里只能是Activity,不能是Fragment。您可以在 Activity 上定义任意数量的接口。instanceof不在乎 -
我编辑了,这里当然是Activity,所以Activity在层次结构中比Fragment接口高
-
在哪里编写接口定义并不重要。它可能在单独的
MainFragmentListener.java文件中...
标签: java android oop inheritance instanceof