Activity是MainFragmentListener的一个实例,是吗?
Activity is an instance of MainFragmentListener, is it true?
我想知道,这怎么可能。
我有带有监听器的 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();
}
activity:
public class MainActivity extends AppCompatActivity
implements NavigationView.OnNavigationItemSelectedListener,
MainFragment.MainFragmentListener{
public void xx(){
abc
};
public void yy(){
abc2
};
}
Activity is higher in the hierarchy than the fragment interface
所以呢?假设 Fragment 分配给 MainActivity,那么 context instanceof
将对
成立
- class 本身 - MainActivity。
- 你在那个class上定义的任何接口(不管接口的定义写在哪里)
- NavigationView.OnNavigationItemSelectedListener
- MainFragment.MainFragmentListener
以及每个class和接口in the hierarchy
public class AppCompatActivity
extends FragmentActivity implements AppCompatCallback, TaskStackBuilder.SupportParentable, ActionBarDrawerToggle.DelegateProvider
java.lang.Object
↳ android.content.Context
↳ android.content.ContextWrapper
↳ android.view.ContextThemeWrapper
↳ android.app.Activity
↳ android.support.v4.app.FragmentActivity
这是因为 instanceof
还检查 class 是否实现了接口。您可以阅读 documentation:
The instanceof operator compares an object to a specified type. You
can use it to test if an object is an instance of a class, an instance
of a subclass, or an instance of a class that implements a particular
interface.
尽管我认为 instanceof
运算符名称有点误导。
我想知道,这怎么可能。
我有带有监听器的 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();
}
activity:
public class MainActivity extends AppCompatActivity
implements NavigationView.OnNavigationItemSelectedListener,
MainFragment.MainFragmentListener{
public void xx(){
abc
};
public void yy(){
abc2
};
}
Activity is higher in the hierarchy than the fragment interface
所以呢?假设 Fragment 分配给 MainActivity,那么 context instanceof
将对
- class 本身 - MainActivity。
- 你在那个class上定义的任何接口(不管接口的定义写在哪里)
- NavigationView.OnNavigationItemSelectedListener
- MainFragment.MainFragmentListener
以及每个class和接口in the hierarchy
public class AppCompatActivity
extends FragmentActivity implements AppCompatCallback, TaskStackBuilder.SupportParentable, ActionBarDrawerToggle.DelegateProvider
java.lang.Object
↳ android.content.Context
↳ android.content.ContextWrapper
↳ android.view.ContextThemeWrapper
↳ android.app.Activity
↳ android.support.v4.app.FragmentActivity
这是因为 instanceof
还检查 class 是否实现了接口。您可以阅读 documentation:
The instanceof operator compares an object to a specified type. You can use it to test if an object is an instance of a class, an instance of a subclass, or an instance of a class that implements a particular interface.
尽管我认为 instanceof
运算符名称有点误导。