我有简单的布局和viewModel。我想将它们彼此连接但是它们没有连接。上述问题的问题是在日志中没有错误,我的应用程序也没有崩溃。
这是我的布局:
<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<data>
<variable
name="progressView"
type="uz.iutlab.ictnews.viewModel.ProgressViewModel" />
<variable
name="viewModel"
type="uz.iutlab.ictnews.viewModel.DetailFragmentViewModel" />
</data>
<RelativeLayout
android:id="@+id/activity_detail"
android:layout_width="match_parent"
android:layout_height="match_parent"
xmlns:tools="http://schemas.android.com/tools"
tools:context="uz.iutlab.ictnews.view.fragment.DetailFragment">
<RelativeLayout
android:id="@+id/fragment_detail_post_root"
android:layout_width="match_parent"
android:layout_height="match_parent">
<android.support.design.widget.AppBarLayout
android:layout_width="match_parent"
android:layout_height="@dimen/collapsing_image_height">
<android.support.design.widget.CollapsingToolbarLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<com.makeramen.roundedimageview.RoundedImageView
android:id="@+id/fragment_detail_image_post"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:adjustViewBounds="true"
android:scaleType="centerCrop"
android:src="@{viewModel.image}"
app:layout_collapseMode="parallax"
app:setContext="@{viewModel.context}" />
<android.support.v7.widget.Toolbar
android:id="@+id/fragment_detail_toolbar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:layout_collapseMode="pin" />
<TextView
android:id="@+id/fragment_detail_title_post"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:padding="@dimen/spacing_view_large"
android:text="@{viewModel.title}"
android:textColor="@android:color/white"
android:textSize="@dimen/font_size_title_huge" />
</android.support.design.widget.CollapsingToolbarLayout>
</android.support.design.widget.AppBarLayout>
</RelativeLayout>
</RelativeLayout>
这是我的ViewModel类
public class DetailFragmentViewModel extends BaseObservable {
private Post mPost;
private Context mContext;
public DetailFragmentViewModel(Post mPost,Context mContext) {
this.mPost = mPost;
this.mContext = mContext;
}
public String getTitle() {
return mPost.getTitle().getRendered();
}
public Context getContext () {
return mContext;
}
public String getImage() {
if (mPost.getMedia().getSource_url() != null) {
return mPost.getMedia().getSource_url();
} else {
return null;
}
}
@BindingAdapter({"android:src","setContext"})
public static void downloadImage (RoundedImageView imageView,String url,Context context) {
if (url!=null) {
Picasso.with(context).load(url).into(imageView);
} else {
imageView.setImageResource(R.drawable.placeholder);
}
}
}
没有错误,没有崩溃。应用程序正常工作,但没有任何标题,任何图像。我试过这个,而不是覆盖它自己编写的方法但不起作用。
@BindingAdapter({"bind:imageUrl","setContext"})
public static void downloadImage (RoundedImageView imageView,String url,Context context) {
if (url!=null) {
Picasso.with(context).load(url).into(imageView);
} else {
imageView.setImageResource(R.drawable.placeholder);
}
}
除此之外。我也用debug检查它,上面的方法没有被调用。
答案 0 :(得分:2)
您最好删除app:setContext="@{viewModel.context}"
并从适配器的视图中获取它。您还需要使用没有命名空间的属性名称;因此,bind:imageUrl
代替imageUrl
仅使用@BindingAdapter("imageUrl")
public static void downloadImage (RoundedImageView imageView, String url) {
if (url != null) {
Picasso.with(imageView.getContext()).load(url).into(imageView);
} else {
imageView.setImageResource(R.drawable.placeholder);
}
}
。
Picasso
但由于R.drawable.placeholder
异步工作,您可能会在将图像再次设置为BindingAdapter
后结束图像。
最后,您还可以查看生成的绑定java源代码,看看您的@media screen and (max-width: 799px) {
}
是否在某处被调用。
答案 1 :(得分:0)
尝试这样:
<?php
$string = "Service, Service, Service, 8 mars, 2017, 22 mars, 2017, 5 april, 2017, 08:00, 08:00, 08:00";
$pattern = '/(\d+) (\w+), (\d+)/i'; //remove comma before year
$replacement = '${1} $2 $3';
$fixed = preg_replace($pattern, $replacement, $string);
$array = explode(', ', $fixed);
$i=0;
foreach($array as $value) {
echo $value.", ";
$i++;
if ($i == 3) {
echo '<br>';
$i = 0;
}
}
?>
答案 2 :(得分:0)
问题不在我的ViewModel或我的xml文件中,一切都是正确的,没有语法错误。问题在这里这是片段,我已将我的片段与我的viewModel连接在一起。我在这里创建绑定时犯了错误可以看到它。这是我的不工作
FragmentStudentLifeBinding binding = DataBindingUtil.inflate(inflater,R.layout.fragment_student_life,container,false);
这是正确的
FragmentStudentLifeBinding binding = DataBindingUtil.inflate(inflater,R.layout.fragment_student_life,container,true);
我错过了将片段附加到活动上,这就是为什么我的绑定没有工作21天。希望它对某人有帮助。