2017-10-05 4 views
-1

私の問題はbindingですが、正しくはありません! textfieldに新しいテキストを入力し、textfieldからデータを取得しようとすると、bindingのヘルプが表示されます。古いデータが表示されます。間違いを見つけようとしましたが、できませんでした。Android-kotlin-bindingはプロパティを更新しません

マイactivity_fblogin.xml

<?xml version="1.0" encoding="utf-8"?> 
<layout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    xmlns:tools="http://schemas.android.com/tools"> 

    <data> 
    </data> 

    <android.support.constraint.ConstraintLayout 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:background="@color/grey_main" 
     android:descendantFocusability="beforeDescendants" 
     android:fitsSystemWindows="true" 
     android:focusableInTouchMode="true" 
     app:layout_constraintBottom_toBottomOf="parent" 
     app:layout_constraintEnd_toEndOf="parent" 
     app:layout_constraintStart_toStartOf="parent" 
     app:layout_constraintTop_toTopOf="parent" 
     tools:context="com.example.darkt.makeyouself.activities.FBLogin" 
     tools:ignore="MissingConstraints"> 

     <EditText 
      android:id="@+id/userName" 
      android:layout_width="220dp" 
      android:layout_height="43dp" 
      android:ems="10" 
      android:inputType="textPersonName" 
      android:text="test01" 
      app:layout_constraintEnd_toEndOf="parent" 
      app:layout_constraintStart_toStartOf="parent" 
      app:layout_constraintTop_toTopOf="parent" 
      tools:text="Login"/> 


     <EditText 
      android:id="@+id/userPass" 
      android:layout_width="220dp" 
      android:layout_height="45dp" 
      android:layout_marginTop="25dp" 
      android:ems="10" 
      android:inputType="textPassword" 
      android:text="123456" 
      app:layout_constraintEnd_toEndOf="parent" 
      app:layout_constraintHorizontal_bias="0.5" 
      app:layout_constraintStart_toStartOf="parent" 
      app:layout_constraintTop_toBottomOf="@+id/userName" 
      tools:layout_editor_absoluteX="74dp" 
      tools:layout_editor_absoluteY="245dp" 
      tools:text="Password"/> 


     <Button 
      android:id="@+id/loginButton" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_marginEnd="8dp" 
      android:layout_marginStart="8dp" 
      android:layout_marginTop="8dp" 
      android:text="Login" 
      android:textColor="@color/green_main" 
      app:layout_constraintEnd_toEndOf="@+id/userPass" 
      app:layout_constraintTop_toBottomOf="@+id/userPass" /> 

    </android.support.constraint.ConstraintLayout> 

</layout> 

それはfblogin_activityのための私のkotlinクラスです。私はこの問題を解決しようとしていたが、...私にお願いしてください!

package com.example.darkt.makeyouself.activities 

class FBLogin : AppCompatActivity() { 

    private var binding: ActivityFbloginBinding? = null 
    private var auth: FirebaseAuth? = null 
    private var dbHelper: FirebaseHelper? =null 

    override fun onCreate(savedInstanceState: Bundle?) { 
     super.onCreate(savedInstanceState) 
     binding = DataBindingUtil.setContentView(this, R.layout.activity_fblogin) 
     auth = FirebaseAuth.getInstance() 
     dbHelper = FirebaseHelper() 
     setContentView(R.layout.activity_fblogin) 

     binding?.executePendingBindings() 

     signIn.setOnClickListener{_ -> showSignInActivity()} 
    } 

    private fun loginToSystem() { 
     val email = binding?.userName?.text.toString().trim() 
     val password = binding?.userPass?.text.toString() 
     binding?.executePendingBindings() 

     Toast.makeText(this, email, Toast.LENGTH_SHORT).show() 
     Toast.makeText(this, password, Toast.LENGTH_SHORT).show() 
    } 
} 

Example mistake

答えて

0

実際にデータバインディングを使用して、あなたのレイアウトXMLには何もありません。

あなたのタグでは、データバインディングのために参照するオブジェクトを定義する必要があります。例えば:

<data> 
    <variable name="user" type="com.myapp.User"/> 
</data> 

さらに、ユーザ名/パスワードフィールドにテキストフィールド内のテキストフィールド

<EditText 
     android:id="@+id/userName" 
     android:layout_width="220dp" 
     android:layout_height="43dp" 
     android:ems="10" 
     android:inputType="textPersonName" 
     android:text="@={user.username}" 
     app:layout_constraintEnd_toEndOf="parent" 
     app:layout_constraintStart_toStartOf="parent" 
     app:layout_constraintTop_toTopOf="parent"/> 


    <EditText 
     android:id="@+id/userPass" 
     android:layout_width="220dp" 
     android:layout_height="45dp" 
     android:layout_marginTop="25dp" 
     android:ems="10" 
     android:inputType="textPassword" 
     android:text="@={user.password}" 
     app:layout_constraintEnd_toEndOf="parent" 
     app:layout_constraintHorizontal_bias="0.5" 
     app:layout_constraintStart_toStartOf="parent" 
     app:layout_constraintTop_toBottomOf="@+id/userName" 
     tools:layout_editor_absoluteX="74dp" 
     tools:layout_editor_absoluteY="245dp"/> 

注@ = {user.username}のために、このユーザーを参照する必要がありますダウン。クラスユーザーのすべてのプロパティについて、セッター/ゲッターを指定する必要があります。 @ =は、この値が変更されたときに基礎となるオブジェクトを更新することを意味します。

val user = User() 
binding.setVariable(BR.user, user) 
binding.executePendingBindings() 

、あなたが行くように良いことがあります:あなたはこのような何かを行う必要がありますあなたの「executePendingBindings」の前に

+0

答えていただきありがとうございます、クリス!しかし、それは動作していません。 20日前に私はいくつかの質問をしました:https://stackoverflow.com/questions/46380992/kotlin-android-binding-not-update-data 誰も質問に答えました –

関連する問題