2015-07-10 39 views

回答

2

我們還沒有這個,也許在v1之後。不確定你的用例是什麼,但是我們已經爲每個視圖創建了一個ID字段,所以當你需要這些數據時,你可以使用該視圖來獲取它。

例如如果您有<EditText android:id="@+id/mytext"/>

生成的綁定類將有public final EditText mytext;

+0

我知道了!謝謝 – araraujo

+0

在rc1中,您可以擁有視圖中任何事件的事件處理程序。例如,'android:onTextChanged =「@ {myObj.textChanged}」'。我知道這不是雙向數據綁定,但它確實讓生活變得更輕鬆。 –

+0

對於各種組件,雙向數據綁定同時可用。有關詳細信息,請參見http://stackoverflow.com/documentation/android/111/data-binding-library/6634/built-in-twoway-data-binding#t=201704111334151449175 – aha

0

下面是一個簡單的例子:

<layout xmlns:android="http://schemas.android.com/apk/res/android"> 

    <data> 
     <variable name="bind" type="com.example.app.MainActivity.Bind"/> 
    </data> 

    <LinearLayout 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:orientation="vertical"> 

     <EditText 
      android:id="@+id/editText" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:onTextChanged="@{bind.textChanged}" 
      android:text="@{bind.text}"/> 

    </LinearLayout> 
</layout> 

和活動代碼(使用retrolambda):

public class MainActivity extends AppCompatActivity { 

    private final Bind bind = new Bind(); 

    public class Bind { 
     public ObservableField<String> text = new ObservableField<>(); 

     public TextViewBindingAdapter.OnTextChanged textChanged = (s, start, before, count) -> { 
      System.out.println("New value: " + s); 
     }; 
    } 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     ActivityMainBinding binding = DataBindingUtil.setContentView(this, R.layout.activity_main); 
     binding.setBind(bind); 
    } 
}