我想知道,这怎么可能。
我有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
 };

}

最佳答案

层次结构中的活动高于片段接口


所以?假设将Fragment分配给MainActivity,则context instanceof对于true


类本身-MainActivity。
您在该类上定义的任何接口(无论接口的定义写在哪里)


NavigationView.OnNavigationItemSelectedListener
MainFragment.MainFragmentListener



以及每个类和接口in the hierarchy

public class AppCompatActivityextends 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

07-26 04:26