После обновления переменной на мой взгляд модель мой фрагмент editText не обновляет - PullRequest
0 голосов
/ 24 апреля 2020

У меня это нормально работает в моей основной деятельности, но по какой-то причине с моим фрагментом он не хочет обновлять поле editText после его изменения. Внутри моего файла frag_controls. xml у меня есть фрагмент editText внутри моего фрагмента, например:

<EditText
    android:id="@+id/alarmTemp"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_marginStart="5dp"
    android:layout_marginTop="4dp"
    android:ems="10"
    android:textColor="@color/background"
    android:background="@color/colorWhite"
    android:imeOptions="actionDone"
    android:inputType="numberDecimal"
    android:text="@{userModel.alarmTemp}"
     />

раздел данных над ним:

<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>
        <variable
            name="userModel"
            type="com.mycompany.myapp.UIViewModel"/>
    </data>

Затем в java коде моего фрагмента :

  public View onCreateView(LayoutInflater inflater, ViewGroup parent, Bundle savedInstanceState) {
        // Defines the xml file for the fragment
        View view = inflater.inflate(R.layout.fragment_controls, parent, false);    
        binding = DataBindingUtil.inflate(inflater, R.layout.fragment_controls, parent, false);
        userModel  = ViewModelProviders.of(this).get(UIViewModel.class);
        binding.setLifecycleOwner(this);
        binding.setUserModel(userModel);

        View rootView = binding.getRoot();
        return rootView;

В моей модели данных я установил alarmTemp следующим образом: alarmTemp.setValue(s);

И это работает, когда вы запускаете его, любое значение, которое я даю s, появится в моем EditText , Но если я установлю его позже во время работы, он не изменится. Это работает для полей, которые находятся в моей основной деятельности, хотя. Поэтому я не понимаю, почему это не работает в моем фрагменте.

О, и температура тревоги определена так же, как в viewModel:

public MutableLiveData<String> alarmTemp = new MutableLiveData<>();

1 Ответ

1 голос
/ 24 апреля 2020

Возможно, дело не в этом, но есть подозрение, что вы пытаетесь разделить вашу UIViewModel между вашей активностью и фрагментом.

В этом случае вам придется иметь дело с одним и тем же экземпляром UIViewModel, в противном случае вы могли бы измените данные в вашем "Activity-instance" -ViewModel и не увидите никаких изменений, наблюдая за "фрагмент-экземпляром" -ViewModel.

Если это источник проблемы, вы можете получить ту же "активность" -ViewModel в вашем фрагменте следующий код ( ссылка на документацию ):

userModel = new ViewModelProvider(requireActivity()).get(UIViewModel.class);
...