代码之家  ›  专栏  ›  技术社区  ›  John Joe Mayank Nema

如何重写默认方法?

  •  0
  • John Joe Mayank Nema  · 技术社区  · 6 年前

    我们有这行代码 A级

     drawer.addDrawerListener(toggle);
    

    ctrl + left click

    public void addDrawerListener(@NonNull DrawerListener listener) {
            if (listener == null) {
                return;
            }
            if (mListeners == null) {
                mListeners = new ArrayList<DrawerListener>();
            }
            mListeners.add(listener);
        }
    

    我们想展示一下 null 如果侦听器是 ,所以我们 Override 此方法并添加到 .

        @Override
        public void addDrawerListener(@NonNull DrawerLayout.DrawerListener listener) {
            if (listener == null) {
                Toast.makeText(getApplication(),"null",Toast.LENGTH_LONG).show();
                return;
            }
            if (mListeners == null) {
                mListeners = new ArrayList<DrawerLayout.DrawerListener>();
            }
            mListeners.add(listener);
        }
    

    但后来我们

    Method does not override method from its superclass
    

    如果我们想改变,我们该怎么办 addDrawerListener ?

    我的类是扩展到AppCompatActivity

    @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
    
            Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
            toolbar = (Toolbar) findViewById(R.id.toolbar);
            setSupportActionBar(toolbar);
    
            DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
            ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(
                    this, drawer, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close);
    
            if (savedInstanceState == null) {
                Toast.makeText(getApplication(), "null", Toast.LENGTH_LONG).show();
                RssFragment fragment = new RssFragment();
                FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction();
                fragmentTransaction.replace(R.id.fragment_container, fragment);
                fragmentTransaction.commit();
            }
    
            drawer.addDrawerListener(toggle);
    
        }
    

    添加部分代码后导航抽屉不工作

     if (savedInstanceState == null) {
                Toast.makeText(getApplication(), "null", Toast.LENGTH_LONG).show();
                RssFragment fragment = new RssFragment();
                FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction();
                fragmentTransaction.replace(R.id.fragment_container, fragment);
                fragmentTransaction.commit();
            }
    

    但如果我取下,导航抽屉可以正常工作。我们想从那里调试。

    3 回复  |  直到 6 年前
        1
  •  0
  •   CommonsWare    6 年前

    那是图书馆的。不能修改库的编译版本。

    如果我们想更改addDrawerListener,我们该怎么办?

    扩展Java类 drawer 是( DrawerLayout addDrawerListener() 在这里,将逻辑和链接添加到现有逻辑的超类实现中。然后,无论在哪里定义,都要使用子类而不是基类 .

        2
  •  2
  •   Nabin Bhandari    6 年前

    那是因为你的 DrawerLayout 其中包含方法 addDrawerListener .

    抽屉布局 并使用这个新类来实例化抽屉。

        3
  •  1
  •   Ashwini Violet    6 年前

    如果您想在抽屉打开、关闭时执行某些任务,可以这样做。

     drawer.addDrawerListener(new DrawerLayout.DrawerListener() {
            @Override
            public void onDrawerSlide(@NonNull View drawerView, float slideOffset) {
    
            }
    
            @Override
            public void onDrawerOpened(@NonNull View drawerView) {
    
            }
    
            @Override
            public void onDrawerClosed(@NonNull View drawerView) {
    
            }
    
            @Override
            public void onDrawerStateChanged(int newState) {
    
            }
        });
    

    在这里 DrawerListener DrawerLayout

    在你的情况下,你没有这样做 Method does not override method from its superclass

    另一个选择是将类扩展为 纳宾班达里