(Firebase Authen) Выход и намерение из фрагмента в MainActivity не работает - PullRequest
0 голосов
/ 01 мая 2020
class ProfileActivity : AppCompatActivity() {   << on xml file has sign out Button

    var mAuth: FirebaseAuth? = null

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_profile)

        mAuth = FirebaseAuth.getInstance()

        btn_signout.setOnClickListener() {
                mAuth!!.signOut()
                var intent = Intent(this, MainActivity::class.java)
                startActivity(intent)
                finish()
            }


        }
    }



class ChatActivity : AppCompatActivity() {   << activity's using NavbatListener for fragment.

    private val mOnNavigationItemSelectedListener = BottomNavigationView.OnNavigationItemSelectedListener {item->
        when(item.itemId){
            R.id.nav_chat -> {
                println("home pressed")
                replaceFragment(ChatFragment())
                return@OnNavigationItemSelectedListener  true
            }
            R.id.nav_contact -> {
                println("contact pressed")
                replaceFragment(ContactFragment())
                return@OnNavigationItemSelectedListener  true
            }
            R.id.nav_position -> {
                println("position pressed")
                replaceFragment(PositionFragment())
                return@OnNavigationItemSelectedListener  true
            }
            R.id.nav_profile -> {
                println("profile pressed")
                replaceFragment(ProfileFragment())
                return@OnNavigationItemSelectedListener  true
            }


        }
            false
    }

    private  fun  replaceFragment(fragment: Fragment){
        val fragmentTransaction = supportFragmentManager.beginTransaction()
        fragmentTransaction.replace(R.id.fragmentContainer, fragment)
        fragmentTransaction.commit()
    }



    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_chat)

        bottomNavigation.setOnNavigationItemSelectedListener(mOnNavigationItemSelectedListener)
        replaceFragment(ChatFragment())

    }


}

У меня есть кнопка «btn_signout» на фрагменте, и я хочу выйти из MainActivity по назначению.

это работает, если я использую «меню параметров», но я хочу сделать с помощью простой кнопки .

Я новичок. Спасибо за помощь

Ответы [ 2 ]

0 голосов
/ 01 мая 2020

Поскольку вы делаете это из фрагмента и переходите к действию, вы должны сделать это так:

 btnSignOutAccount.setOnClickListener {
                    AuthUI.getInstance().signOut(this@YourFragmentName.context!!)
                        .addOnCompleteListener {
                            startActivity(intentFor<YourActivityName>().newTask().clearTask())
                        }
                }

над библиотекой anko используется для уточнения кода по назначению, вот код стандартным способом:

 val intent = Intent(this@YourFragmentName, YourActivityName::class.java).apply {
                    flags = Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_CLEAR_TASK
                }
                startActivity(intent)

просто замените его кодом вашего блока addOnCompleteListener. Если вам интересен этот флаг, он очищает состояние предыдущей активности, что означает, что если вы случайно нажмете кнопку назад, он не вернет вас снова в вашей активности входа в систему или в любой другой активности, с которой вы вышли.

0 голосов
/ 01 мая 2020

Измените this на getActivity() в вашем намерении. Как это:

   var intent = Intent(getActivity(), MainActivity::class.java) 
   getActivity().startActivity(intent)
...