forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   Android (http://forum.boolean.name/forumdisplay.php?f=150)
-   -   Data Binding (http://forum.boolean.name/showthread.php?t=19994)

Жека 11.09.2015 07:42

Data Binding
 
Новая фича, доступная в суппорт библиотеке v7.

Подробное описание: Data Binding Guide

Суть:
связывание данных и интерфейса
без необходимости
программно назначать значения параметров UI.

В чём профит? (мне этого достаточно)

* Упрощение. Для простых данных, типа обновления строкового значения в лэйауте, можно привязать нужную переменную к элементу TextView в xml и забыть о ней (*).
* Обновление UI из других потоков без необходимости использовать Handler или runOnUIThread (Communicating with the UI Thread).

(*) чтобы при изменении переменной в коде обновлялось значение в UI нужно добавить интерфейс Observable, для простых данных типа String, int и т.п. уже сделаны обёртки типа ObservableString.


Пример типичной ситуации:

Нужно обновить интерфейс данными, полученными по колбэку.

PHP код:

public void onDataChanged(String newValue) {
    
runOnUiThread(new Runnable() {
        @
Override
        
public void run() {
            
TextView tv currentFragment.findViewById(R.id.textViewData); //либо этот TextView запоминаем при создании фрагмента, чтобы не искать
            
tv.setText(newValue);
        }
    });


А если использовать биндинг, то в xml добавляем

PHP код:

...
<
data>
    <
variable name="data" type="com.myproj.Data"/>
</
data>
....
 <
TextView android:layout_width="wrap_content"
           
android:layout_height="wrap_content"
           
android:text="@{data.strValue}"/> 

и для колбэка

PHP код:

private ObservableString strValue "";
public 
void onDataChanged(String newValue) {
    
strValue newValue;


Это не статья, просто новость. Поэтому примеры оторваны от реальности.

Ну и привет майкрософту, у них модель биндинга изначально применяется в WindowsPhone.
Data binding for Windows Phone 8

Жека 12.09.2015 10:56

Ответ: Data Binding
 
Кто-нибудь пробовал эту штуку?

Я проверил на тестовом примере, делая всё по инструкции - работает.
Вставил в свой проект - работает. НО!
У меня перестала отображаться ListView.
Проверяю количество записей во вью - 4, на экране ничего нет.

Если убрать из кода биндинг
PHP код:

MainBinding binding DataBindingUtil.setContentView(thisR.layout.main);
User user = new User("Bind 1""Bind 2");
binding.setUser(user); 

не меняя xml, в котором есть связка для биндинга, то на месте значений @{user.name} просто пустота (это логично) и listview корректно отображается.

Пока что неуд.


Часовой пояс GMT +4, время: 00:09.

vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot