2017-10-30 3 views
1

Visible, Gone, VISIBLE 중 하나를 시도하는 LinearLayout이 있습니다. 그러나 사라지면 다시 볼 수 없게됩니다. 참고로, 나는 그것을 보이지 않게 만들면 잘 작동한다 : 아무런 문제없이 나타나고 사라진다.setVisibility (View.GONE) 후 뷰가 다시 나타나지 않습니다.

이 내 파일은 다음과 같습니다

private void hideOrShowLoading(final boolean show) { 

    final ViewGroup spinnerWrapper = (ViewGroup)ll.findViewById(R.id.spinner_wrapper); 
    final View spinner = ll.findViewById(R.id.spinner); 

    if (show) { 
     spinnerWrapper.setVisibility(View.VISIBLE); // Not working after being set to GONE previously 
     final Animation rotation = AnimationUtils.loadAnimation(getContext(), R.anim.rotate); 
     rotation.setFillAfter(true); 
     spinner.startAnimation(rotation); 
    } else { 
     spinnerWrapper.setVisibility(View.GONE); 
     spinner.clearAnimation(); 
    } 
} 

모든 팁 :

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:orientation="vertical" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"> 
    <LinearLayout 
     android:id="@+id/noconnectionll" 
     android:visibility="gone" 
     android:padding="@dimen/node_default_spacing" 
     android:background="@color/category_no_internet" 
     android:orientation="horizontal" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content"> 
     <TextView 
      android:text="@string/no_internet_short" 
      android:textColor="#fff" 
      android:layout_weight="1" 
      android:layout_width="0dp" 
      android:layout_height="wrap_content"/> 
     <Button 
      android:id="@+id/no_connection_retry" 
      android:text="@string/try_again" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content"/> 
    </LinearLayout> 
    <ListView 
     android:dividerHeight="0dp" 
     android:layout_width="match_parent" 
     android:layout_height="0dp" 
     android:layout_weight="1" /> 
    <LinearLayout 
     android:id="@+id/spinner_wrapper" 
     tools:visibility="visible" 
     android:visibility="invisible" 
     android:background="#a0ffffff" 
     android:gravity="center_horizontal|center_vertical" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content"> 
     <ImageView 
      android:id="@+id/spinner" 
      android:src="@drawable/ic_spinner" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" /> 
     <TextView 
      android:id="@+id/category_loading" 
      android:text="@string/loading" 
      android:textColor="#000" 
      android:padding="@dimen/activity_padding" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" /> 
    </LinearLayout> 
</LinearLayout> 

이 내가/숨기기를 보여주기 위해 사용하고 방법은? ListView의 높이가 0이고 무게가 1 인 항목과 관련이 있습니까?

listview.invalidate(); 
    spinnerWrapper.invalidate(); 
    ll.invalidate(); 
    ll.requestLayout(); 

ll가 모두 포함되어있는 LinearLayout입니다 :

감사

업데이트

는 나는 또한 행운과 함께 if (show) 블록 후 다음 시도했다.

+0

정상적으로 작동합니다. 'show'가 올바르게 설정되어 있습니까? – Cheticamp

+0

LinearLayout "spinner_wrapper" – Cyrus

+0

에서 visibility = "visible"및 android : visibility = "invisible"속성 도구를 제거해보십시오. hideOrShowLoading()이 UI 스레드에서 실행되고 있는지 확인하십시오. – rdbmsa

답변

0

나는 이것이 layout_weight=1 속성으로 인해 발생했다고 생각하지만 올바르게 수정하지 못했습니다.

다음 해킹이 효과적이었습니다. 기본적으로, 나는 항상 볼 수있는 다른 선형 레이아웃으로 spinnerWrapper을 둘러 쌉니다.

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:orientation="vertical" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"> 
    <LinearLayout 
     android:id="@+id/noconnectionll" 
     tools:visibility="visible" 
     android:visibility="gone" 
     android:padding="@dimen/node_default_spacing" 
     android:background="@color/category_no_internet" 
     android:orientation="horizontal" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content"> 
     <TextView 
      android:text="@string/no_internet_short" 
      android:textColor="#fff" 
      android:layout_weight="1" 
      android:layout_width="0dp" 
      android:layout_height="wrap_content"/> 
     <Button 
      android:id="@+id/no_connection_retry" 
      android:text="@string/try_again" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content"/> 
    </LinearLayout> 
    <ListView 
     tools:background="#d496d4" 
     android:dividerHeight="0dp" 
     android:layout_width="match_parent" 
     android:layout_height="0dp" 
     android:layout_weight="1" /> 
    <!-- Weird bug with layout_weight=1 on the listview above means we need this linearlayout --> 
    <LinearLayout 
     android:background="#0ca917" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content"> 
     <LinearLayout 
      android:id="@+id/spinner_wrapper" 
      android:background="#a0ffffff" 
      android:gravity="center_horizontal|center_vertical" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content"> 
      <ImageView 
       android:id="@+id/spinner" 
       android:src="@drawable/ic_spinner" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" /> 
      <TextView 
       android:id="@+id/category_loading" 
       android:text="@string/loading" 
       android:textColor="#000" 
       android:padding="@dimen/activity_padding" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" /> 
     </LinearLayout> 
    </LinearLayout> 
</LinearLayout>