我在想,怎么可能。
我有MainActivty和MainFragment with listener:MainFragmentListener
当然,我在MainActivity中实现了这个监听器作为接口
现在我想了解这个:
if (context instanceof MainFragmentListener)
总是如此,怎么可能? MainActivity不是MainFragmentListener的实例 MainFragmentListener是一个公正的界面,而不是对象!
MainFragment:
@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
};
}
答案 0 :(得分:1)
这是因为instanceof
还检查类是否实现了接口。您可以阅读documentation:
instanceof运算符将对象与指定类型进行比较。您 可以使用它来测试对象是否是类的实例,实例 子类的实现,或实现特定的类的实例 接口
虽然我认为instanceof
运营商名称有点误导。
答案 1 :(得分:0)
层次结构中的活动高于片段接口
所以?假设片段已分配给MainActivity,则context instanceof
对于
以及每个班级和界面 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