Android Kotlin:TextView.text未按预期工作

时间:2017-12-04 19:43:19

标签: java android android-studio kotlin textview

我有一个应用程序,如果用户尚未登录,则会使用Firebase登录。如果用户登录其用户个人资料信息正确显示。关闭应用程序并重新打开用户名和电子邮件后没有设置并转到我的默认文本。但是,如果我退出并重新进入它将显示。我觉得它与更新ui有关,但卡住了。

如果需要,我可以在午休结束后发布代码

使用代码更新

这是MainActivity中的相关代码,我在这里检查用户是否已登录,如果允许他们从那里开始,如果没有开始登录活动。

class MainActivity : AppCompatActivity(), NavigationView.OnNavigationItemSelectedListener {

val TAG = "MainActivity"

var mAuth: FirebaseAuth? = null
var mUser: FirebaseUser? = null
var userEmailTV: TextView? = null
var userDispNameTV: TextView? = null
val RC_SIGN_IN = 123

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_main)
    setSupportActionBar(toolbar)

    val toggle = ActionBarDrawerToggle(
            this, drawer_layout, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close)
    drawer_layout.addDrawerListener(toggle)
    toggle.syncState()
    nav_view.setNavigationItemSelectedListener(this)

}

 override fun onStart() {
    super.onStart()

    mAuth = FirebaseAuth.getInstance()
    mUser = mAuth?.currentUser

    if (mUser != null) {

        userEmailTV = findViewById<View>(R.id.userEmail) as TextView?
        userEmailTV?.text = mUser?.email
        userDispNameTV = findViewById<View>(R.id.userName) as TextView?
        userDispNameTV?.text = mUser?.displayName

        Log.i(TAG, "User Display Name : ${mUser?.displayName}")
        Log.i(TAG, "Users Email :  ${mUser?.email}")

    } else {
        startActivityForResult(
                // Get an instance of AuthUI based on the default app
                AuthUI.getInstance().createSignInIntentBuilder().build(),
                RC_SIGN_IN)
    }


}

这是用于在导航栏中保存用户个人资料信息的布局信息

 <TextView
    android:id="@+id/userName"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:paddingTop="@dimen/nav_header_vertical_spacing"
    android:textAppearance="@style/TextAppearance.AppCompat.Body1"
    android:text="Username"/>

<TextView
    android:id="@+id/userEmail"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="youremail@something.com"/>

2 个答案:

答案 0 :(得分:1)

我经过多次试验和错误研究后的理论是.....这个问题不是由于TextView在错误的位置初始化,正如其他人在上面的评论中所想到的那样。由于导航标题视图没有时间来膨胀。我将编写初始化导航标题然后TextView和编辑结果的编码。

修改

这是我做的工作。 我添加了

        uemail = findViewById<View>(R.id.nav_view) as NavigationView
    navHead = uemail.getHeaderView(0)
    tvEmail = navHead.findViewById(R.id.userEmail) as TextView
    tvDisplayName = navHead.findViewById(R.id.userName) as TextView
    tvEmail.text = mUser?.email
    tvDisplayName.text = mUser?.displayName

我把它放在我在onCreate和onStart中调用的函数内部。如果我没有,它只会在登录后填充或根本不填充。这样它就可以随时填充正确的数据。我发现它与Android Studio在23.1之后的导航视图中使用了recyclerview之类的东西有关。

答案 1 :(得分:0)

你确定&#34; findView&#34;成功了吗?尝试在导航标题视图接收器上调用它