【发布时间】:2016-09-07 11:23:48
【问题描述】:
我的布局中有一个简单的 imageview,我有一个 api,它给了我一个图像 url。我在我的布局中集成了数据绑定。现在解析 api 后,我通过这一行设置模型 binding.setUserinfo(memberObj.getMemberdata());
现在我还有一个绑定适配器,用于编写 imgurl 代码。现在自定义绑定适配器在 Activity 启动和解析 api 之后调用 两次。
现在我想在成功解析 api 后通知 UI。
这是我的 xml activity_main.xml 代码:
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
xmlns:app="http://schemas.android.com/apk/res-auto">
<data class="MainBinding">
<variable
name="userinfo"
type="com.myapplication.retrofit.pojo.ImgTest"/>
</data>
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.myapplication.retrofit.MainActivity">
<ImageView
android:layout_width="250dp"
android:layout_height="250dp"
android:id="@+id/imageView"
app:image_url="@{userinfo.imgUrl}"
/>
</RelativeLayout>
</layout>
这是我的 Pojo:ImgTest.java
public class ImgTest extends BaseObservable {
String imgUrl;
@Bindable
public String getImgUrl() {
return imgUrl;
}
public void setImgUrl(String imgUrl) {
this.imgUrl = imgUrl;
notifyPropertyChanged(BR.imgUrl);
}
}
这是我的 CustomBinder.java
public class CustomBinders {
private static final String TAG = "CustomBinders";
@BindingAdapter({"image_url"})
public static void loadImageWithOUtProgressBar(ImageView view, String imageUrl){
Log.d(TAG, "before loadImageWithOUtProgressBar: "+imageUrl);
Log.d(TAG, "after loadImageWithOUtProgressBar: "+imageUrl);
Picasso.with(view.getContext())
.load(imageUrl)
.into(view);
}
}
这是 MainActivity.java
public class MainActivity extends AppCompatActivity {
private static final String TAG = "MainActivity";
RestManager mManager;
MainBinding binding;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
binding = DataBindingUtil.setContentView(this,R.layout.activity_main);
mManager = new RestManager();
Call<ResponseBody> getUserInfo = mManager.getService().getUserInfo("25","sell");
getUserInfo.enqueue(new Callback<ResponseBody>() {
@Override
public void onResponse(Call<ResponseBody> call, Response<ResponseBody> response) {
int sc = response.code();
Log.d(TAG, "onResponse: "+sc);
if(response.isSuccessful())
{
ImgTest img = new ImgTest();
try {
String res = response.body().string();
JSONObject jobj = new JSONObject(res);
JSONObject obj = jobj.getJSONObject("memberdata");
String imgUrl = "";
imgUrl = obj.getString("prifile_picture");
img.setImgUrl(imgUrl);
binding.setUserinfo(img);
} catch (Exception e) {
e.printStackTrace();
}
}
}
@Override
public void onFailure(Call<ResponseBody> call, Throwable t) {
}
});
}
}
请告知如何解决此问题。提前致谢。
【问题讨论】:
-
我对数据绑定一无所知,但是当您拨打电话然后打开一个对话框,然后在响应完成后关闭此对话框
-
这不是解决办法
-
binding.setUserinfo(img);足以刷新您的用户界面,如果它不起作用,您可以在此之后尝试binding.executePendingBindings();。 -
我的用户界面正在更新,这不是问题。问题是当活动开始时,CustomBinder 调用设置值为 null 的 img。在 Api 成功响应后,当我设置
binding.setUserinfo(img);时,再次自定义绑定器调用具有适当的值 -
是的,这是所需的行为,每当创建视图时,它将加载所有数据,并在再次更改其值后创建该视图。您可以在
BindingAdapter中添加一些关于null值的条件,或者将该条件放在 xml 本身中
标签: java android data-binding android-databinding