صحيح تخطي تسجيل الدخول النشاط إذا قمت بتسجيل الدخول بالفعل في

StackOverflow https://stackoverflow.com//questions/24009711

سؤال

بلدي رمز قاذفة حاليا يبدأ النشاط الدخول.لقد تخزين تسجيل حالة في SharedPreferences.هل هناك أي طريقة صحيح تخطي تسجيل الدخول النشاط تذهب مباشرة إلى النشاط الرئيسي دون أي واجهة المستخدم مواطن الخلل.جميع الحلول القائمة تشمل finish() في onCreate() يسبب النشاط الدخول العنوان أن يكون لفترة وجيزة مرئية أو بعض أخرى قصيرة فارغة على الشاشة واجهة المستخدم خلل.

هل كانت مفيدة؟

المحلول

قاذفة acitivy مع أي واجهة المستخدم التي تقرر فتح MainActivity أو LoginActivity.يمكنك أن تعلن أي واجهة المستخدم:

android:theme="@android:style/Theme.NoDisplay"

اثنين من غيرها من الحلول الممكنة:

فقط تفعل ذلك بطريقة أخرى:جعل الخاص بك mainActivity قاذفة الخاص بك وجعلها تحقق ما إذا كان المستخدم بتسجيل الدخول.ثم إعادة توجيه إلى loginActivity عندما لم تكن هذه هي الحالة.

طريقة أخرى هي أن العمل مع شظايا.لديها قاعدة النشاط التي يمكن تحميل كل mainFragment و loginFragment.للرجوع إليها: https://developer.android.com/training/basics/fragments/index.html

نصائح أخرى

يمكنك إنشاء قاعدة النشاط التي سوف تحقق مما إذا كان المستخدم اسم المستخدم وكلمة المرور بالفعل في SharedPreferences ويبدأ النشاط إذا كانت موجودة وبالتالي لا.

على سبيل المثال:

public class BeanStalkBaseActivity extends SherlockActivity{

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    setContentView(R.layout.activity_main);


    if(SavedPreference.getUserName(this).length() == 0)
    {
        Intent intent = new Intent(this,LoginActivity.class);
        intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
        finish();
        startActivity(intent);
    }else
    {
        Intent intent = new Intent(this,MainActivity.class);
        intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
        finish();
        startActivity(intent);
    }

}

}

BeanStalkBaseActivity يجب أن يكون المشغل الخاص بك كما أنه يقتصر عمل المدقق.

يمكنك أيضا التحقق من حالة تسجيل الدخول خلال شاشة البداية النشاط إذا كان لديك واحدة.البداية شاشات كبيرة مما يتيح للمستخدمين معرفة التطبيق لم توقفت عندما يكون التحميل و يمكن أيضا استخدام إعادة توجيه التطبيق إلى الشاشة المناسبة.

تابعت هذا دليل كبير على أول الوقت مما يجعل واحدة: https://www.bignerdranch.com/blog/splash-screens-the-right-way/

إذا تحقق ما إذا كان المستخدم بتسجيل الدخول بالفعل في داخل النشاط الرئيسي أو النشاط الحالي ومن ثم التبديل إلى نشاط آخر إذا كان مسجلا ، وهذا سوف يؤدي إلى الخلل UI ، أيالنشاط الحالي الخاص بك سوف تظهر على الثاني أو النصف ثم فإنه سيتم الانتقال إلى النشاط المستهدف.

يمكنك القيام بذلك مثل :

  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    mAuth = FirebaseAuth.getInstance();
    if (mAuth.getCurrentUser() != null) {

        Toast.makeText(MainActivity.this, "Already Logged In", 
        Toast.LENGTH_LONG).show();
        Intent intent = new Intent(MainActivity.this, Home.class);
        intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
        startActivity(intent);

    } else {
        getWindow().requestFeature(Window.FEATURE_NO_TITLE);
        getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, 
        WindowManager.LayoutParams.FLAG_FULLSCREEN);

        setContentView(R.layout.activity_main);

        BtnSignUp = findViewById(R.id.btnSignUp);
        BtnLogIn = findViewById(R.id.btnLogIn);


        BtnSignUp.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                Intent signUp = new Intent(MainActivity.this, SignUpActivity.class);
                startActivity(signUp);

            }
        });

        BtnLogIn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                Intent logIn = new Intent(MainActivity.this, Login.class);
                startActivity(logIn);
            }
        });
    }
}

في النشاط الرئيسي تحقق فقط إذا كان المستخدم غير فارغة ثم تصل النار إلى المنزل

firebaseAuth = FirebaseAuth.getInstance();

FirebaseUser user = firebaseAuth.getCurrentUser();

if (user != null) {
    finish();
    startActivity(new Intent(MainActivity.this, UserHomeActivity.class));
}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top