gpt4 book ai didi

java - 使用 notifyPropertyChanged(BR.xx) 时 DataBinding 不更新 TextView

转载 作者:行者123 更新时间:2023-11-29 02:23:22 25 4
gpt4 key购买 nike

我有一个工作数据绑定(bind)用于从 XML 调用的函数(即“@{user.mUCL}”)。但是当我在任何方法或任何地方使用 notifyPropertyChanged(BR.mUCL) 新值没有得到更新时,我在下面提供了一个示例问题,其中 for-loop 用值更新了 Text1,但其他 Text2 无法用相同的值更新“not -工作”。

Java fragment

   public class FragmentTwo extends Fragment {

Update_observable updateObservable;
TextView fragment_quote_open_val;

public FragmentTwo() {
// Required empty public constructor
}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment

Fragment2Binding fragmentTwoBinding = DataBindingUtil.inflate(inflater,R.layout.fragment2,null,false);
View view = fragmentTwoBinding.getRoot();
updateObservable = new Update_observable();
fragmentTwoBinding.setUser(updateObservable);

fragment_quote_open_val=(TextView)view.findViewById(R.id.fragment_quote_open_val);

bindingLoop();

return view;
}

@BindingAdapter({"mUCL"})
public static void runMe(TextView view, String message) {
if (message != null)
view.setText(message);
}


public void bindingLoop(){

final int[] k = {0};

final Update_observable ss=new Update_observable();

final Handler handler = new Handler();
final int delay = 3000; //milliseconds

handler.postDelayed(new Runnable(){
public void run(){
//do something
k[0]++;
fragment_quote_open_val.setText(String.valueOf(k[0]));
ss.setmUCL(String.valueOf(k[0]));

handler.postDelayed(this, delay);
}
}, delay);
}
}

基础观察

 public class Update_observable extends BaseObservable {

public String mUCL= "not-worked";

@Bindable
public String getmUCL() {
return this.mUCL;
}

public void setmUCL(String mUCL) {
this.mUCL = mUCL;
notifyPropertyChanged(BR.mUCL);
}

}

XML

<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
xmlns:bind="http://schemas.android.com/apk/res-auto">

<data>

<variable
name="user"
type="com.journaldev.androidmvvmbasics.fragments.Update_observable"/>

</data>


<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#00ff04"
android:orientation="vertical"
android:gravity="center"
tools:context="com.journaldev.androidmvvmbasics.fragments.FragmentTwo">

<!-- TODO: Update blank fragment layout -->
<TextView
android:id="@+id/fragment_quote_open_val"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_margin="20dp"
android:textColor="#000000"
android:textSize="16dp" />
<TextView
android:id="@+id/fragment_quote_ucl_val"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@{user.mUCL}"
android:layout_margin="20dp"
bind:mUCL="@{user.mUCL}"
android:textColor="#000000"
android:textSize="16dp" />
</LinearLayout>

</layout>

最佳答案

请确保您在基类中执行 DataBindingUtil.inflate。

Fragment1Binding fragmentOneBinding = DataBindingUtil.inflate(inflater,R.layout.fragment1,null,false);
View view = fragmentOneBinding.getRoot();
fragmentOneBinding.setUsermodel(new UserModel("XXXX","XXXX"));

 ActivityMainBinding activityMainBinding = DataBindingUtil.setContentView(this, 
R.layout.activity_main);
activityMainBinding.setUser(new User());
activityMainBinding.executePendingBindings();

然后在 BaseObservable 类中做

@Bindable
public String mEmail= "....";

重建项目,只是为了确保@Bindable确实完成

现在根据您的要求打电话。

    notifyPropertyChanged(BR.xxx);

关于java - 使用 notifyPropertyChanged(BR.xx) 时 DataBinding 不更新 TextView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53724987/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com