APP登陆设计 User的全局设置

本文介绍了一种APP中用户登录后的状态管理方法,包括如何设计User对象、使用全局Application进行用户信息存储与读取,以及如何在需要登录权限的Activity中实现登录验证和界面更新。

登录过后APP保存一个User对象这个对象和整个APP紧密相关。下面说一下User是如何设计的.

首先在APPlication类中添加User对象 并设置获取和设置的方法:

public class MyApplication extends Application
{
    private User user;


        @Override
        public void onCreate() {
            super.onCreate();

            initAppComponent();

        }


    public User getUser() {
        return user;
    }

    public void setUser(User user) {
        this.user = user;

    }


 

}

在登陆界面时通过全局Application 设置。

  User user=new User();
             MyApplication myApplication=MyApplication.getInstance(this);
             //此处用数据库模拟网络操作获取的数据
             Cursor cursor= userDb.selectUserMessage(phone);
             if(cursor.moveToFirst()){
                 do{
                     user.setAccount(cursor.getString(cursor.getColumnIndex("userphone")));
                     user.setPassword(cursor.getString(cursor.getColumnIndex("userKeyword")));
                     user.setNicheng("张三");
                 }while(cursor.moveToNext());
             }
             if(cursor!=null){
                 cursor.close();
             }

             myApplication.setUser(user);
             


另外如果有些Actvitiy 需要登陆才能进入那么我们需要重写 操作所在Activity(更多时候是BaseActivity)的StartActivity方法和StartActivityForResult方法(因为需要返回数据刷新刚才的界面)

public  abstract class BaseActivity extends AppCompatActivity {



    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_base);
        setupActivityComponent(MyApplication.getInstance(this).getAppComponent());
    }


//重载获取方法 启动时判断
    public void startActivityForResult(Intent intent,boolean isNeedLogin, int requestCode) {
        if (isNeedLogin) {

            User user = MyApplication.getInstance(this).getUser();
            if (user != null) {
                super.startActivityForResult(intent,requestCode);
            } else {
              Log.d("is else",""+isNeedLogin);
                Intent loginIntent = new Intent(this, LoginActivity.class);
                super.startActivityForResult(loginIntent,requestCode);
            }

        } else {
            super.startActivityForResult(intent,requestCode);
        }
    }

  //重载了这个方法  每当 要跳转到另外一个Activity时,增加一个参数用来判断是否需要登录 如果没登录则会跳转至登录界面
    public void startActivity(Intent intent,Boolean isNeedLogin) {

        if (isNeedLogin) {

            User user = MyApplication.getInstance(this).getUser();
            if (user != null) {
                super.startActivity(intent);
            } else {

         //       MyApplication.getInstance(this).putIntent(intent);
                Intent loginIntent = new Intent(this, LoginActivity.class);
                super.startActivity(loginIntent);

            }

        } else {
            super.startActivity(intent);
        }
        super.startActivity(intent);
    }


}

当通过StartAcitivityForResult (成功跳转至登陆界面后登陆成功后往往需要返回数据并刷新所在的界面:

所以要给登陆界面 如步骤2 一样 设置User 并且设置resultCode


最后在需要更新VIew的Activity 中会回调 需要设置的请求码和返回码都相等才能执行这个逻辑,返回码和请求码是确定从那个Activity发出和结束的。

 @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
       
        if (requestCode == Contants.REQUEST_CODE && resultCode == this.RESULT_OK) {

            new Thread() {
                public void run() {
                    //这儿是耗时操作,完成之后更新UI;
                    runOnUiThread(new Runnable(){

                        @Override
                        public void run() {
                            //通知子view g

                            MinePagerView minePagerView= (MinePagerView) mainViewPagerAdapter.getPagerViewArrayList().get(3);
                            minePagerView.initView();
                            mainViewPagerAdapter.notifyDataSetChanged();
                        }

                    });
                }
            }.start();

        }
    }


在需要登陆的界面 通常有些控件需要判断User是否存在,如果不存在则是两种状态例如 提示登陆的TextView

 User user =  MyApplication .getInstance(mainActivity).getUser();
            if(user ==  null){

                textView_Log .setText(ř "登陆“);
            } else {
                textView_Log .setText(usr。 getNicheng());
                //并载入用户信息!
               // loadMineData();

            }


通常登录成功后依然要跳转至某界面:

所以在application中保存Intent 并提供方法:

 private Intent intent;

    public void putIntent(Intent intent) {
        this.intent = intent;
    }

    public Intent getIntent() {
        return this.intent;
    }
    //跳转至目标activity
    public void jumpToTargetActivity(Context context) {

        context.startActivity(intent);
        this.intent = null;
    }

在跳转前 put 

回调时get :

@Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        Log.d("执行回调","1");

        if (requestCode == Contants.REQUEST_CODE && resultCode == this.RESULT_OK) {

            new Thread() {
                public void run() {
                    //这儿是耗时操作,完成之后更新UI;
                    runOnUiThread(new Runnable(){

                        @Override
                        public void run() {
                            //通知子view g

                            MinePagerView minePagerView= (MinePagerView) mainViewPagerAdapter.getPagerViewArrayList().get(3);
                            minePagerView.initView();
                            mainViewPagerAdapter.notifyDataSetChanged();
                        }

                    });
                }
            }.start();

        }


        User user = MyApplication.getInstance(this).getUser();
        if (user != null) {
            //跳转至目标Activity
            if (MyApplication.getInstance(this).getIntent() == null) {

            }
            else {
                MyApplication.getInstance(this).jumpToTargetActivity(this);
            }
        }
        else {

        }


    }



<think>好的,用户想在Vue3项目中全局设置user-select为none,也就是禁止用户选择文本。我需要考虑Vue3中如何实现全局样式,同时确保这个样式应用到所有组件上。首先,全局样式通常可以通过在App.vue的样式中添加,或者创建一个单独的CSS文件然后在main.js中引入。不过这样可能需要!important来覆盖其他样式。 另外,Vue3推荐使用CSS-in-JS或者CSS模块,但全局样式的话,可能还是直接写CSS更简单。比如在App.vue的style标签里写: ```css * { user-select: none; -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; } ``` 不过这样可能不够,因为有些组件可能会有自己的样式覆盖。这时候可能需要用!important。或者,在公共CSS文件中定义,然后在main.js里引入这个文件,确保它最先加载。 还有一种方法是使用JavaScript动态添加样式,比如在main.js中创建一个style元素并插入到head里。这样可以确保全局应用,而不需要依赖组件的作用域。比如: ```javascript const style = document.createElement('style'); style.textContent = `* { user-select: none !important; -webkit-user-select: none !important; -moz-user-select: none !important; -ms-user-select: none !important; }`; document.head.appendChild(style); ``` 这样可能更可靠,因为直接操作DOM,不会被scoped样式影响。需要注意的是,使用!important可能会有副作用,但用户的需求是全局生效,所以可能需要这样做。 还要考虑是否需要排除某些元素,比如输入框,这时候可以调整选择器,比如: ```css *:not(input):not(textarea) { user-select: none; /* 其他前缀 */ } ``` 不过用户可能希望全部元素都不可选,所以要看具体情况。 另外,用户提到参考了vue-element-admin升级到Vue3的案例,可能他们的项目结构中有全局样式的地方可以添加。或者使用Vue的provide/inject,但样式方面可能不太适用。总之,关键点是如何确保样式全局生效,不受scoped的限制,可能需要用全局CSS文件或者动态插入样式。</think>在Vue3中实现全局user-select:none的配置,可以通过以下步骤实现: ### 方法一:全局CSS注入(推荐) 1. 创建全局CSS文件 ```css /* src/assets/styles/global.css */ * { user-select: none !important; -webkit-user-select: none !important; -moz-user-select: none !important; -ms-user-select: none !important; } ``` 2. 在main.js中引入 ```javascript import { createApp } from 'vue' import App from './App.vue' import './assets/styles/global.css' // 引入全局样式 createApp(App).mount('#app') ``` ### 方法二:动态样式注入 在main.js中添加以下代码: ```javascript const style = document.createElement('style') style.textContent = ` * { user-select: none !important; -webkit-user-select: none !important; -moz-user-select: none !important; -ms-user-select: none !important; } ` document.head.appendChild(style) ``` ### 方法三:App组件样式穿透 在App.vue的style标签中添加: ```vue <style scoped> /* 穿透所有子组件 */ :deep(*) { user-select: none; -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; } </style> ``` ### 注意事项 1. 使用`!important`确保覆盖组件库默认样式 2. 添加浏览器前缀保证兼容性 3. 如果需要对特定元素保持可选,使用例外选择器: ```css input, textarea, [contenteditable] { user-select: auto !important; } ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值