>

Android 레이아웃 중 하나에서 ImageView 중 하나가 "선택적"이므로 src에 대한 URL이 항상있는 것은 아닙니다. MVVM 패턴을 따르고 있는데 URL이 있으면 ImageView를 표시하고 URL이 null이면 표시하지 않으려 고합니다.

먼저,이 작업은 거의 동일한 두 개의 별도 레이아웃 리소스 파일을 사용하여 수행 할 수 있다는 것을 알고 있습니다. 하지만이 두 레이아웃의 유일한 차이점 때문에이 축소판 이미지가 존재하거나 존재하지 않을 수 있다는 사실 때문에 많은 코드를 작성하고 싶지 않습니다 (pull).

   <ImageView
        android:id="@+id/image_topic_creator_thumbnail"
        android:layout_width="40dp"
        android:layout_height="40dp"
        android:onClick="@{viewModel::getProfileOfCurrentTopicCreator}"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/text_topic_body"
        app:userThumbnailUrl="@{viewModel.currentTopic.creator.thumbnailUrl}" />

다음은 ViewModel의 코드입니다.

   // circular image
@BindingAdapter({"userThumbnailUrl"})
public static void setUserThumbnailUrl(ImageView view, String url) {
    RequestOptions options = new RequestOptions()
            .circleCrop()
            .placeholder(R.drawable.user_thumbnail_placeholder)
            .error(R.drawable.user_thumbnail_placeholder)
            .priority(Priority.LOW);
    Glide.with(view.getContext())
            .load(url)
            .apply(options)
            .into(view);
}

이 경우 app:userThumbnailUrl  글라이드에서 오류가 발생하기 때문에 null 또는 빈 문자열을 사용할 수 없습니다. ViewModel에서 논리를 구현하여 URL이 null인지 비어 있는지 확인한 다음 글라이드를 사용하지 않지만 결과로 무엇을 반환합니까? URL이 null 일 때 아무것도하지 않습니까? ImageView에 오류가 발생하고 앱에서 문제가 발생하지 않습니까?


  • 답변 # 1

    와이즈 비즈  기본적으로 표시됩니다. 기본값은 보이지 않게하고 URL이 있으면 표시합니다.

    ImageView
    
    

  • 답변 # 2

    이와 같은 것이 작동합니다 :

     <ImageView
            android:id="@+id/image_topic_creator_thumbnail"
            android:layout_width="40dp"
            android:layout_height="40dp"
            android:visible="gone" //set invisible here here
            android:onClick="@{viewModel::getProfileOfCurrentTopicCreator}"
            app:layout_constraintLeft_toLeftOf="parent"
            app:layout_constraintTop_toBottomOf="@+id/text_topic_body"
            app:userThumbnailUrl="@{viewModel.currentTopic.creator.thumbnailUrl}" />
    
    
    @BindingAdapter({"userThumbnailUrl"})
        public static void setUserThumbnailUrl(ImageView view, String url) {
            if (url != "") {
                RequestOptions options = new RequestOptions()
                    .circleCrop()
                    .placeholder(R.drawable.user_thumbnail_placeholder)
                    .error(R.drawable.user_thumbnail_placeholder)
                    .priority(Priority.LOW);
                Glide.with(view.getContext())
                    .load(url)
                    .apply(options)
                    .into(view);
            }
        }
    
    
    // circular image @BindingAdapter({"userThumbnailUrl"}) public static void setUserThumbnailUrl(ImageView view, String url) { RequestOptions options = new RequestOptions() .circleCrop() .placeholder(R.drawable.user_thumbnail_placeholder) .error(R.drawable.user_thumbnail_placeholder) .priority(Priority.LOW); if(url != null && !url.isEmpty() ){ Glide.with(view.getContext()) .load(url) .apply(options) .into(view); } else{ view.setVisibility(View.GONE); } }

관련 자료

  • 이전 python - 장고 단위 테스트 경로를 편집하는 방법은 무엇입니까?
  • 다음 uwp Caliburnmicro 탐색