Добавьте класс привязки данных BindableItem во фрагмент

#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