Я разрабатываю своего рода монитор, который должен обновлять множество изображений (поддельные светодиоды) на основе того, что я получаю с компьютера, и дать пользователю знать текущее состояние машины. Есть ли способ установить в переменной прослушиватель значений, который запускает метод при изменении значения, в котором я могу обновить свой интерфейс?Android-прослушиватель с переменным значением
ответ
Спасибо всем за помощь и комментарии;
я узнаю Data Binding был лучшим вариантом в моем случае, так что после нескольких попыток я был в состоянии построить пример проект, где у меня есть обработчик, который каждые 1ски приращение целочисленного значения по 1. После этого я проверяю, является ли значение парой или dispair, и я установил boolen true или false.
Я установил файл макета, в котором у меня есть 2 текстовых вида и кнопка переключения. Первый текст текстового вида привязан к простой строке с моим именем, второй привязан к целому числу, которое увеличивается каждый раз (таймер), а кнопка Toggle привязывается к логическому.
Вот код:
MainActivity
public class MainActivity extends AppCompatActivity {
ActivityMainBinding binding;
android.os.Handler Handler;
User user;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
binding = DataBindingUtil.setContentView(this, R.layout.activity_main);
user = new User("Lorenzo", "Gangemi", 0);
binding.setUser(user);
useHandler();
}
public void useHandler() {
if (Handler != null) {
Handler.postDelayed(RunableHandler, 1000);
Handler.removeCallbacks(RunableHandler);
}
try {
Handler = new Handler();
} catch (Exception e) {
Handler = new Handler(Looper.getMainLooper());
}
Handler.postDelayed(RunableHandler, 1000);
}
private Runnable RunableHandler = new Runnable() {
@Override
public void run() {
user.increment_i();
binding.setUser(user);
useHandler();
}
};
}
Пользователь
public class User {
private final String firstName;
private final String lastName;
private boolean pari;
private int i;
public User(String firstName, String lastName, int i) {
this.firstName = firstName;
this.lastName = lastName;
this.i = i;
setPari(checkPari());
}
public String getFirstName() {
return firstName;
}
public String getLastName() {
return lastName;
}
public int getI() {
return i;
}
public void increment_i()
{
i++;
setPari(checkPari());
}
public boolean checkPari()
{
return i%2==0;
}
public boolean isPari() {
return pari;
}
public void setPari(boolean pari) {
this.pari = pari;
}
}
activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android">
<data>
<variable name="user" type="mdptech.databinding.User"/>
</data>
<LinearLayout
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@{user.firstName}"/>
<TextView android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@{Integer.toString(user.i)}" />
<ToggleButton
android:text="ToggleButton"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/toggleButton"
android:drawableBottom="@drawable/toggle"
android:background="@android:color/transparent"
android:textOff="OFF"
android:textOn="ON"
android:checked="@{user.pari ? true : false}"/>
</LinearLayout>
</layout>
Все работает нормально. Как вы можете видеть из кода, в обработчике Runnable я вызываю метод для увеличения таймера, но мне нужно также позвонить binding.setUser(user);
для обновления макета.
Есть ли способ сделать это обновление происходить автоматически, а не потому, что я называю метод?
Это не большая проблема, потому что я могу создать отдельный обработчик, который петли каждые 100 мс (например) и в его runnable call binding.setUser(user);
, но это ускорит мою работу. Спасибо.
Возможно, я говорю о двухстороннем привязке данных, не зная –
- 1. Форматированный NSLocalizedString с переменным значением
- 2. Tsung. content_from_file с переменным значением
- 3. sql заменить переменным значением
- 4. Проблема с Powershell с переменным значением 0
- 5. SED не работает с переменным значением
- 6. Справочник по объектам Flex с переменным значением
- 7. JQuery CSS с переменным + статическим значением
- 8. Lisp - Сделать список с переменным значением
- 9. Возвращает объект с переменным значением макс экземпляра
- 10. Как создать файл cookie с переменным значением
- 11. Perl: Строка, содержащая шаблон с переменным значением
- 12. База данных изменений MySQL с переменным значением
- 13. Вспышка, вызывающая проблемы с переменным значением
- 14. Как отобразить метку с переменным значением? (JavaFX)
- 15. матрица с переменным и постоянным значением
- 16. Обновление Textbox с текущим переменным значением
- 17. Замените свойство с переменным значением nodeJS
- 18. Как справиться с переменным хеш-значением
- 19. Тестирование XML с помощью XMLUnit с переменным значением
- 20. Дайте новый класс Нг-класса с переменным значением
- 21. Concat Строки с переменным значением для формирования нового Variable
- 22. Экспорт строки с переменным значением MYSQL в csv в php
- 23. мне нужно, чтобы просмотреть запись с переменным значением
- 24. PHP preg_replace с переменным значением, используя найденное выражение как ключ
- 25. Как выбрать тег с переменным значением в jQuery
- 26. Создать таблицу в цикле с переменным значением в DB2
- 27. Python/Django возвращает тип данных с переменным значением
- 28. Пропустить объект с переменным значением angularJs для фильтра
- 29. Найти первую строку с переменным значением больше определенного номера
- 30. Доступ к значениям в вложенной позиции с переменным значением
лучше написать свой образец кода, который вы сделали для этого, и сообщить нам, где вы столкнулись с проблемой. –
одним из вариантов является привязка данных –
что-то вроде [http://stackoverflow.com/questions/14457711/android-listening-for-variable-changes](http://stackoverflow.com/questions/14457711/android-listening-for -переменные-изменения)? –