2017-12-04 5 views
-2

사용자가 아직 로그인하지 않은 경우 사용자가 Firebase로 로그인하게하는 앱이 있습니다. 사용자 프로필 정보가 올바르게 표시되는 경우. 앱을 닫고 사용자 이름과 이메일을 다시 열면 설정되지 않고 기본 텍스트로 이동합니다. 하지만 로그 아웃하면 다시 표시됩니다. 나는 ui를 업데이트하는 것과 관련이 있지만 붙어있는 것처럼 느낍니다.Android Kotlin : TextView.text가 예상대로 작동하지 않습니다.

이 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="[email protected]"/> 
+0

코드를 게시하십시오. –

+0

K는 내가 점심을 먹은 후에 할 수 있다고 말했다. 하지만 그때까지 어떤 생각을 왜 logcat에서 올바른 정보를 표시하지만 사용자가 애플 리케이션을 열고 나서 서명하지 않으면 UI에 표시되지 않습니다? LogGcat에 UI에 표시해야하는 것처럼 느껴집니다. – Vahalaru

+0

값을 변경하는 코드에 뭔가가 있어야합니다. 그래서 코드를 게시 해 보겠습니다. –

답변

0
많은 시행 착오와 연구 후에 나의 이론은이 문제로 인해 .....하지 않다

것을 탐색 서랍 내부의 사용자 프로파일 정보를 보유하고 레이아웃 정보입니다 TextView가 위의 주석에서 생각한 것처럼 다른 위치에서 초기화됩니다. 탐색 헤더보기에는 팽창 할 시간이 없었기 때문에 탐색 헤더를 초기화 한 다음 TextView를 코딩하고 결과를 편집하는 코딩 작업을하겠습니다.

편집 여기

내가 그것을 작동하도록 한 것입니다. 는 I 내가에서 onCreate 및 ONSTART 모두 내부라는 함수의 내부에 배치

 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 

첨가. 내가하지 않으면 서명 한 후에 만 ​​채울 것입니다. 이렇게하면 올바른 데이터와 항상 채워집니다. 안드로이드 스튜디오가 23.1이나 그런 식으로 nav 뷰를 위해 recyclerview를 사용하고 나서 뭔가 관계가 있다는 것을 발견했습니다.

+0

나쁜 이론처럼 보입니다. 인플레이션은 주 스레드뿐만 아니라 액티비티 콜백에서도 작동하므로 onStart가 onCreate가 완료되기 전에 실행될 가능성은 없습니다. – Pavlus

+0

onCreate 및 onStart에서 TextView를 초기화했지만 여전히 TextView가 null이 아님을 나타내는 오류가 발생합니다. 비록 내가 (Logcat이 이것을 증명하는) 값을 TextView에 설정하고있다. 최신 오류는 TextView가 null로 설정 될 수 없다고 말하지 않습니다. TextView를 시작했지만로드 할 시간이 있기 전에 텍스트를 설정하려고하는 특정 탐색 헤더가 아니라는 사실을 알기 때문에 필자는 그것을 필자에게 알립니다. 이것은 또한 TextView가 시작 활동을 수행 한 후에 올바른 정보만을 표시하는 이유를 설명합니다. 일단보기를 팽창시키고 돌아올 기회가 있으면 – Vahalaru

0

"findView"가 성공 했습니까? 탐색 헤더보기 수신기에서 호출 해보십시오.

관련 문제