#java #android #android-viewbinding
Вопрос:
Я хочу добавить a Data Binding View
во фрагмент, который работает нормально. Но я хочу сначала создать его экземпляр с помощью PostCardItem
класса и предоставить данные, а затем добавить представление linearLayout.addView(view)
. В строке PostCardItem postCardItem = new PostCardItem(0, getContext(), post, null);
я создаю экземпляр класса, и теперь я хотел бы раздуть представление так, чтобы в нем были данные.
Фрагмент диалога
public class ImageDetail extends DialogFragment {
Post post;
public ImageDetail() {
}
private RecyclerViewCommunityPostItemBinding binding;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View root = inflater.inflate(R.layout.fragment_community_dialog_image_detail, container);
PostCardItem postCardItem = new PostCardItem(0, getContext(), post, null);
binding = RecyclerViewCommunityPostItemBinding.inflate(getLayoutInflater());
View view = binding.getRoot();
LinearLayout linearLayout = root.findViewById(R.id.linear_layout_community_dialog_image_detail);
linearLayout.addView(view);
return root;
}
}
Привязываемый элемент
public class PostCardItem extends BindableItem<RecyclerViewCommunityPostItemBinding> {
private OnPostClickListener onPostClickListener;
private boolean checked = false;
private Post post;
private Context context;
private boolean expand = false;
private List<BadgesIconVM> badgesIconVMList = EcoBadges;
public PostCardItem(long id, Context context, Post post, OnPostClickListener onPostClickListener) {
super(id);
this.onPostClickListener = onPostClickListener;
this.post = post;
this.context = context;
getExtras().put(MyGardenFragment.INSET_TYPE_KEY, MyGardenFragment.INSET);
}
@Override
public int getLayout() {
return R.layout.recycler_view_community_post_item;
}
@Override
public void bind(@NonNull final RecyclerViewCommunityPostItemBinding binding, int position) {
SpannableStringBuilder userNameSpan = new SpannableStringBuilder()
.append(post.getUserName(), new StyleSpan(android.graphics.Typeface.BOLD), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE)
.append(" hat eine Frage an die Community gestellt");
binding.tvCommunityUserName.setText(userNameSpan);
binding.tvCommunityPostDescription.setText(post.getDescription());
String postDate = TimeUtils.dateToString(post.getDateTime(), "yyyy-MM-dd'T'HH:00:00XXX", "dd.MM.yyyy");
binding.tvCommunityPostDate.setText(postDate);
binding.tvCommunityCommentCount.setText(new StringBuilder().append(post.getComments().size()).append(" Antworten"));
String userProfileUrl = "https://gardi.de/" post.getUserProfilePic();
loadImageUsingGlide(context, userProfileUrl, binding.imageViewCommunityUserImage);
String postImageUrl = "https://gardi.de/" post.getImagesList().get(0).toLowerCase();
loadImageUsingGlide(context, postImageUrl, binding.imageViewCommunityPostImage);
}
public interface OnPostClickListener {
void onClick(Plant plant, RecyclerViewPlantSearchPlantItemBinding viewBinding, View view, int Pos);
}
}
XML
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<data>
<import type="android.view.View" />
</data>
<androidx.cardview.widget.CardView
android:id="@ id/card_view_plant"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="@dimen/marginPaddingSize_10sdp"
app:cardCornerRadius="@dimen/cardCornerRadius_medium">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_margin="@dimen/marginPaddingSize_16sdp"
android:orientation="vertical">
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="@dimen/marginPaddingSize_10sdp">
<ImageView
android:id="@ id/imageView_community_user_image"
android:layout_width="@dimen/height_50sdp"
android:layout_height="@dimen/height_50sdp"
android:src="@drawable/gardi_image_placeholder"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<TextView
android:id="@ id/tv_community_user_name"
style="@style/BodyNormalTextSize"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginLeft="@dimen/marginPaddingSize_10sdp"
android:layout_weight="1"
android:text=""
android:textColor="@color/text_dark_intensity2"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toEndOf="@id/imageView_community_user_image"
app:layout_constraintTop_toTopOf="parent" />
<TextView
android:id="@ id/tv_community_post_date"
style="@style/BodySmallTextSize"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginLeft="@dimen/marginPaddingSize_10sdp"
android:text=""
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toEndOf="@id/imageView_community_user_image"
app:layout_constraintTop_toBottomOf="@id/tv_community_user_name" />
</androidx.constraintlayout.widget.ConstraintLayout>
<ImageView
android:id="@ id/imageView_community_post_image"
android:layout_width="match_parent"
android:layout_height="@dimen/height_200sdp"
android:scaleType="centerCrop"
android:src="@drawable/gardi_image_placeholder" />
<TextView
android:id="@ id/tv_community_post_description"
style="@style/BodyNormalTextSize"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/marginPaddingSize_5sdp"
android:textColor="@color/text_dark_intensity2"
android:maxLines="4"
android:text="--"
android:textSize="@dimen/textSize_body_medium" />
<ImageView
android:id="@ id/expand_icon_description"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="end"
android:layout_marginTop="@dimen/marginPaddingSize_5sdp"
android:layout_marginBottom="@dimen/marginPaddingSize_5sdp"
android:backgroundTint="@color/primaryButton"
android:src="@drawable/expand"
android:text="@string/more_details"
android:textSize="@dimen/textSize_body_medium" />
<TextView
android:id="@ id/tv_community_comment_count"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/marginPaddingSize_10sdp"
android:fontFamily="@font/source_sans_pro"
android:text="@string/flowers_available_in"
android:textColor="@color/text_dark_intensity1"
android:textSize="@dimen/textSize_body_medium"
android:textStyle="bold" />
<LinearLayout
android:id="@ id/linear_layout_community_comments"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"/>
</LinearLayout>
</androidx.cardview.widget.CardView>
</layout>
Комментарии:
1. Если вы хотите использовать привязку представления, а не привязку данных, не используйте
<layout></layout>
теги2. ok @EpicPandaForce кстати, я использую класс BindableItem с адаптером группы (который, я полагаю, вы поддерживаете) 😉 ….. теперь я хотел раздуть его без использования RecycleView.
3. Важно знать, используете ли вы тот, с
.databinding
которого или с.viewbinding
которого, если вы хотите использовать привязку просмотра, вам нужно удалить<layout