2

ScrollView로 래핑 된 레이아웃을 사용중인 앱을 개발 중입니다. 이 레이아웃의 조각에서 나는 서버에서 데이터를 가져오고 내 레이아웃에 표시하는 웹 서비스를 때리고있다. 오류가 있거나 웹 서비스에서 사용할 수있는 데이터가 없을 때마다 적절한 메시지가 포함 된 스낵바를 사용자에게 보여줍니다.SnackBar가 잘못된 상태 예외가있는 ScrollView에서 충돌을 일으킬 수 있습니다.

나는 매우 적게 발생하는 문제가 발생하고

문제. 때로는 데이터를 사용할 수없는 및 플로팅 작업이 불법 상태 예외 보여주는 메시지 여기

ScrollView can host only one direct child

으로, 내 응용 프로그램 충돌을 표시되면 충돌 로그

java.lang.IllegalStateException: ScrollView can host only one direct child 
              at android.widget.ScrollView.addView(ScrollView.java:253) 
              at android.support.design.widget.Snackbar.showView(Snackbar.java:475) 
              at android.support.design.widget.Snackbar$1.handleMessage(Snackbar.java:162) 
              at android.os.Handler.dispatchMessage(Handler.java:107) 
              at android.os.Looper.loop(Looper.java:214) 
              at android.app.ActivityThread.main(ActivityThread.java:6102) 
              at java.lang.reflect.Method.invoke(Native Method) 
              at java.lang.reflect.Method.invoke(Method.java:372) 
              at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1028) 
              at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:823) 

나는 많은이 조합을 사용하고있다 화면 중 하나에 대한 레이아웃 코드 만 게시하고 있습니다.

<?xml version="1.0" encoding="utf-8"?> 
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:scrollbars="none"> 

    <LinearLayout xmlns:app="http://schemas.android.com/apk/res-auto" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:background="@drawable/background" 
     android:orientation="vertical" 
     android:paddingBottom="20dp" 
     android:paddingLeft="20dp" 
     android:paddingRight="20dp" 
     android:paddingTop="10dp"> 

     <com.xsinfosol.emergency.progressbar.RopeProgressBar 
      android:id="@+id/progress_bar1" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:layout_marginTop="10dp" 
      app:ropeDynamicLayout="true" 
      app:ropePrimaryColor="@color/red" 
      app:ropeSecondaryColor="#20FFFFFF" 
      app:ropeSlack="0dp" 
      app:ropeStrokeWidth="10dp" /> 

     <ImageView 
      android:id="@+id/iv_default_sos" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_gravity="center_horizontal" 
      android:layout_marginTop="40dp" 
      android:src="@drawable/on_light" /> 

     <LinearLayout 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:layout_marginTop="20dp" 
      android:background="@drawable/edittext_bg"> 

      <com.xsinfosol.emergency.utils.CustomTextView 
       android:layout_width="30dp" 
       android:layout_height="30dp" 
       android:layout_gravity="center_vertical" 
       android:layout_margin="10dp" 
       android:background="@drawable/number_circle" 
       android:gravity="center" 
       android:text="1" 
       android:textColor="@color/red" 
       android:textSize="22sp" /> 

      <com.xsinfosol.emergency.utils.CustomTextView 
       android:id="@+id/tv_view_health" 
       android:layout_width="match_parent" 
       android:layout_height="match_parent" 
       android:layout_gravity="center_vertical" 
       android:drawableRight="@drawable/medical" 
       android:gravity="center_vertical" 
       android:paddingLeft="10dp" 
       android:paddingRight="10dp" 
       android:text="Health" 
       android:textColor="@android:color/white" /> 
     </LinearLayout> 

     <LinearLayout 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:layout_marginTop="10dp" 
      android:background="@drawable/edittext_bg"> 

      <com.xsinfosol.emergency.utils.CustomTextView 
       android:layout_width="30dp" 
       android:layout_height="30dp" 
       android:layout_gravity="center_vertical" 
       android:layout_margin="10dp" 
       android:background="@drawable/number_circle" 
       android:gravity="center" 
       android:text="2" 
       android:textColor="@color/red" 
       android:textSize="22sp" /> 

      <com.xsinfosol.emergency.utils.CustomTextView 
       android:id="@+id/tv_view_police" 
       android:layout_width="match_parent" 
       android:layout_height="match_parent" 
       android:layout_gravity="center_vertical" 
       android:drawableRight="@drawable/police" 
       android:gravity="center_vertical" 
       android:paddingLeft="10dp" 
       android:paddingRight="10dp" 
       android:text="Police" 
       android:textColor="@android:color/white" /> 
     </LinearLayout> 

     <LinearLayout 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:layout_marginTop="10dp" 
      android:background="@drawable/edittext_bg"> 

      <com.xsinfosol.emergency.utils.CustomTextView 
       android:layout_width="30dp" 
       android:layout_height="30dp" 
       android:layout_gravity="center_vertical" 
       android:layout_margin="10dp" 
       android:background="@drawable/number_circle" 
       android:gravity="center" 
       android:text="3" 
       android:textColor="@color/red" 
       android:textSize="22sp" /> 

      <com.xsinfosol.emergency.utils.CustomTextView 
       android:id="@+id/tv_view_fire" 
       android:layout_width="match_parent" 
       android:layout_height="match_parent" 
       android:layout_gravity="center_vertical" 
       android:drawableRight="@drawable/fire" 
       android:gravity="center_vertical" 
       android:paddingLeft="10dp" 
       android:paddingRight="10dp" 
       android:text="Fire" 
       android:textColor="@android:color/white" /> 
     </LinearLayout> 

     <LinearLayout 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:layout_marginTop="10dp" 
      android:background="@drawable/edittext_bg"> 

      <com.xsinfosol.emergency.utils.CustomTextView 
       android:layout_width="30dp" 
       android:layout_height="30dp" 
       android:layout_gravity="center_vertical" 
       android:layout_margin="10dp" 
       android:background="@drawable/number_circle" 
       android:gravity="center" 
       android:text="4" 
       android:textColor="@color/red" 
       android:textSize="22sp" /> 

      <com.xsinfosol.emergency.utils.CustomTextView 
       android:id="@+id/tv_view_no_4" 
       android:layout_width="match_parent" 
       android:layout_height="match_parent" 
       android:layout_gravity="center_vertical" 
       android:drawableRight="@drawable/contact_person" 
       android:gravity="center_vertical" 
       android:paddingLeft="10dp" 
       android:paddingRight="10dp" 
       android:text="Contact Person 1" 
       android:textColor="@android:color/white" /> 
     </LinearLayout> 

     <LinearLayout 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:layout_marginTop="10dp" 
      android:background="@drawable/edittext_bg"> 

      <com.xsinfosol.emergency.utils.CustomTextView 
       android:layout_width="30dp" 
       android:layout_height="30dp" 
       android:layout_gravity="center_vertical" 
       android:layout_margin="10dp" 
       android:background="@drawable/number_circle" 
       android:gravity="center" 
       android:text="5" 
       android:textColor="@color/red" 
       android:textSize="22sp" /> 

      <com.xsinfosol.emergency.utils.CustomTextView 
       android:id="@+id/tv_view_no_5" 
       android:layout_width="match_parent" 
       android:layout_height="match_parent" 
       android:layout_gravity="center_vertical" 
       android:drawableRight="@drawable/contact_person" 
       android:gravity="center_vertical" 
       android:paddingLeft="10dp" 
       android:paddingRight="10dp" 
       android:text="Contact Person 2" 
       android:textColor="@android:color/white" /> 
     </LinearLayout> 

     <LinearLayout 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:layout_marginTop="10dp" 
      android:background="@drawable/edittext_bg"> 

      <com.xsinfosol.emergency.utils.CustomTextView 
       android:layout_width="30dp" 
       android:layout_height="30dp" 
       android:layout_gravity="center_vertical" 
       android:layout_margin="10dp" 
       android:background="@drawable/number_circle" 
       android:gravity="center" 
       android:text="6" 
       android:textColor="@color/red" 
       android:textSize="22sp" /> 

      <com.xsinfosol.emergency.utils.CustomTextView 
       android:id="@+id/tv_view_no_6" 
       android:layout_width="match_parent" 
       android:layout_height="match_parent" 
       android:layout_gravity="center_vertical" 
       android:drawableRight="@drawable/contact_person" 
       android:gravity="center_vertical" 
       android:paddingLeft="10dp" 
       android:paddingRight="10dp" 
       android:text="Contact Person 3" 
       android:textColor="@android:color/white" /> 
     </LinearLayout> 

    </LinearLayout> 
</ScrollView> 

이 난 API

public void parseSOSResponse(String response) { 
    try { 
     JSONObject jsonObject = new JSONObject(response); 
     String Message=jsonObject.optString("Message"); 
     int error_code = jsonObject.getInt("error_code"); 
     if (error_code == 1) { 
      String num_4 = jsonObject.getString("num_4"); 
      String num_5 = jsonObject.getString("num_5"); 
      String num_6 = jsonObject.getString("num_6"); 
      String health_number=jsonObject.getString("health_number"); 
      String fire_number=jsonObject.getString("fire_number"); 
      String police_number=jsonObject.getString("police_number"); 
      Profile_complete=jsonObject.getInt("Profile_complete"); 
      default_sos = jsonObject.getString("default_sos"); 
      tv_view_no_4.setText(num_4); 
      tv_view_no_5.setText(num_5); 
      tv_view_no_6.setText(num_6); 
      tv_view_fire.setText("Fire \n"+fire_number); 
      tv_view_police.setText("Police \n"+police_number); 
      tv_view_health.setText("Health \n"+health_number); 
      progress_bar1.setMax(100); 
      progress_bar1.animate(); 
      progress_bar1.animateProgress(Profile_complete); 
      prefManager.putString(PrefrenceConstants.KEY_EMERGENCY_TYPE,default_sos); 
     }else{ 
      ((ActivityNavigationDrawer)getActivity()).showSnackBar(iv_default_sos,Message); 
     } 
    } catch (JSONException e) { 
     e.printStackTrace(); 
    } 
} 

public void showSnackBar(View view, String message) { 
    Snackbar.make(view, message, Snackbar.LENGTH_SHORT).show(); 
} 
+0

SnackBar를 추가 할 코드를 표시하십시오. – Drv

+0

@Drv가 관련 코드를 추가했습니다. –

+0

showSnackBar 메소드가 작동하는 전체 활동 코드를 추가하십시오. – Drv

답변

0

Marcelo Noguti가 제안한대로 ScrollviewCoordinator Layout이며 스낵바 방법으로보기로 전달하여 문제를 해결했습니다.

0

폭과 콘텐츠를 감싸도록 설정 높이 모두와의 LinearLayout와 아이들 배치 시도 showSnackbar 방식에서 데이터 분석 방법이다. 이 부분에서와 같이

<LinearLayout xmlns:app="http://schemas.android.com/apk/res-auto" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:background="@drawable/background" 
    android:orientation="vertical" 
    android:paddingBottom="20dp" 
    android:paddingLeft="20dp" 
    android:paddingRight="20dp" 
    android:paddingTop="10dp"> 
4

문제는 ScrollViews는 하나의 직접 아이를 가질 수 있으며, 코드에서이 아이는 outter는 선형 레이아웃입니다. snackbar가 호출되도록 호출되면 스네이크 바를 요청하는 뷰는 scrollview 자체이므로 두 명의 직접 자식 (선형 레이아웃과 스낵바에 관한 뷰)이 표시됩니다.

+0

스낵바는 오류 발생시에만 표시되며 동적으로 추가됩니다. 또한 매번 발생하지 않습니다 –

+1

알겠습니다. 이해하십시오. 스낵바가 그려지는 곳을 쉽게 바꿀 수 있도록 변경하는 것이 좋습니다. - 문서를 따라 코디네이터 레이아웃에 배치하십시오. –

관련 문제