手写观察者

手写观察者

Android 开发中遇到登录前后界面展示不同的情况,要怎么处理界面的变化呢?

有两种方法:

  1. 每次打开抽屉的时候做判断
  2. 每次登录状态改变的时候做判断

每次打开抽屉的时候做判断

  • 判断的次数多
  • 代码结构简单

 drawerLayout.addDrawerListener(new DrawerLayout.SimpleDrawerListener() {
            boolean isClosed = true;

            @Override
            public void onDrawerOpened(View drawerView) {
                super.onDrawerOpened(drawerView);
                isClosed = false;
            }

            @Override
            public void onDrawerClosed(View drawerView) {
                super.onDrawerClosed(drawerView);
                isClosed = true;
            }

            @Override
            public void onDrawerStateChanged(int newState) {
                super.onDrawerStateChanged(newState);

                if (isClosed && (newState == DrawerLayout.STATE_DRAGGING || newState == DrawerLayout.STATE_SETTLING)) {
                    boolean isLogged = ((App) getApplication()).isLogged();
                    drawerItems.clear();
                    drawerItems.addAll(DrawerItem.getItems(isLogged));
                    drawerAdapter.notifyDataSetChanged();
                }


            }
        });

每次登录状态改变的时候做判断

  • 判断的次数少
  • 结构复杂些

MainActivity.java 中


        //每次登录状态改变后, 改变drawer 中展示的内容
        ((App) getApplication()).setOnLoginStateChangeListener(new App.OnLoginStateChangeListener() {
            @Override
            public void onChange(User user) {
                drawerItems.clear();
                drawerItems.addAll(DrawerItem.getItems(user != null));
                drawerAdapter.notifyDataSetChanged();
            }
        });

App.java 中


 private User user;

    public User getUser() {
        return user;
    }

    public void setUser(User user) {
        this.user = user;
        if (onLoginStateChangeListener != null) {
            onLoginStateChangeListener.onChange(user);
        }
    }

    private OnLoginStateChangeListener onLoginStateChangeListener;

    public void setOnLoginStateChangeListener(OnLoginStateChangeListener listener) {
        this.onLoginStateChangeListener = listener;
    }
    
    public interface OnLoginStateChangeListener {

        void onChange(User user);
    }

posted @ 2016-04-06 15:32  shang1jk  阅读(207)  评论(0编辑  收藏  举报