마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

이동한 액티비티에서 종료 시, fragment 오류. 도움좀요 흑흑

0 추천

안녕하세요. 아직 해결이 안되서 질문 다시 올립니다..

Fragment를 포함한 Activity(MapActivity)가 있고 Fragment 에서 화면 터치 시, 다른 Activity(TripActivity)로 이동합니다. 참고로 구글맵과는 상관 없습니다.. 그냥 이름만 MapActivity로 정한거라..;;

이동 시에는 startActivityForResult를 사용합니다. 그리고 이동한 Activity(TripActivity)에서 작업 후에 setResult하여 Intent를 넘기고 finish()를 합니다.

finish()하고 나서 오류가 납니다..생각 같아서는 현재 Activity가 종료되고 이전 Activity의 Fragment가 나와야할거 같은데...오류가 뙇. ㅠㅠ

 

그런데,, API22(5.1버전)에서는 잘 돌아가는데 API19(정확히는 4.4.2)에서는 오류가 발생합니다.

오류내용은 inflating 오류 입니다.(Binary XML file line #12: Error inflating class fragment)

아니 그러면.. 맨처음 화면 뜰때부터 오류가 나야지...왜?!ㅠㅠ

 

좀더 확인해보니 첫 Activity(MapActivity)의 onDestroy를 타네요..원래 destroy 하고 다시 생성되는건가요...resume이 아니라? ㅠㅠㅠ

당췌 이유를 모르겠습니다. Fragment 임포트 구문도 import android.support.v4.app.Fragment; 로 바꿨는데도 오류가 나네요... 도움좀 부탁드려요..

 

MapActivity.java(최초화면)

public class MapActivity extends AppCompatActivity implements View.OnClickListener {

//public class MapActivity extends FragmentActivity implements View.OnClickListener {

    public static final int REQUEST_REGISTER = 0;

    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_map); //오류 발생 지점

...

 

activity_map.xml

<FrameLayout

    xmlns:android="http://schemas.android.com/apk/res/android"

    xmlns:tools="http://schemas.android.com/tools"

    android:id="@+id/root_map"

    android:layout_width="match_parent"

    android:layout_height="match_parent"

    android:layout_gravity="center"

    android:layout_marginTop="?attr/actionBarSize"

    tools:showIn="@layout/app_bar_main"

    tools:context=".MapActivity">


    <fragment  <-- 얘를 inflate 할수 없대요. 대체 왜?!!! 
        android:name="unfailing35.test.MapFragment"

        android:id="@+id/map_frag"

        android:layout_width="match_parent"

        android:layout_height="match_parent"/>

 

 

MapFragment.java

public class MapFragment extends Fragment implements View.OnTouchListener {

public boolean onTouch(View v, MotionEvent event) {

      if( startAct == true ){

                                      //화면이동

                    Intent intent = new Intent(mapActivity, TripActivity.class);

                    intent.putExtra("regionCode", regionCode);

                    intent.putExtra("regionDetailCode", regionDetailCode);

                    //test

                    intent.putExtra("bg", mapActivity.isBg);

                    intent.putExtra("exp", mapActivity.isExp);


                    //화면이동

                    //startActivity(intent);

                    startActivityForResult(intent, MapActivity.REQUEST_REGISTER);


                    return true;

}

 

<오류 로그>

java.lang.RuntimeException: Unable to start activity ComponentInfo{unfailing35.test/unfailing35.test.MapActivity}: android.view.InflateException: Binary XML file line #12: Error inflating class fragment

11-26 12:22:16.418 8594-8594/? E/AndroidRuntime:     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2205)

11-26 12:22:16.418 8594-8594/? E/AndroidRuntime:     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2255)

11-26 12:22:16.418 8594-8594/? E/AndroidRuntime:     at android.app.ActivityThread.handleRelaunchActivity(ActivityThread.java:3760)

11-26 12:22:16.418 8594-8594/? E/AndroidRuntime:     at android.app.ActivityThread.access$900(ActivityThread.java:142)

11-26 12:22:16.418 8594-8594/? E/AndroidRuntime:     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1209)

11-26 12:22:16.418 8594-8594/? E/AndroidRuntime:     at android.os.Handler.dispatchMessage(Handler.java:102)

11-26 12:22:16.418 8594-8594/? E/AndroidRuntime:     at android.os.Looper.loop(Looper.java:136)

11-26 12:22:16.418 8594-8594/? E/AndroidRuntime:     at android.app.ActivityThread.main(ActivityThread.java:5118)

11-26 12:22:16.418 8594-8594/? E/AndroidRuntime:     at java.lang.reflect.Method.invokeNative(Native Method)

11-26 12:22:16.418 8594-8594/? E/AndroidRuntime:     at java.lang.reflect.Method.invoke(Method.java:515)

11-26 12:22:16.418 8594-8594/? E/AndroidRuntime:     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:791)

11-26 12:22:16.418 8594-8594/? E/AndroidRuntime:     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:607)

11-26 12:22:16.418 8594-8594/? E/AndroidRuntime:     at dalvik.system.NativeStart.main(Native Method)

11-26 12:22:16.418 8594-8594/? E/AndroidRuntime:  Caused by: android.view.InflateException: Binary XML file line #12: Error inflating class fragment

11-26 12:22:16.418 8594-8594/? E/AndroidRuntime:     at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:713)

11-26 12:22:16.418 8594-8594/? E/AndroidRuntime:     at android.view.LayoutInflater.rInflate(LayoutInflater.java:755)

11-26 12:22:16.418 8594-8594/? E/AndroidRuntime:     at android.view.LayoutInflater.parseInclude(LayoutInflater.java:839)

11-26 12:22:16.418 8594-8594/? E/AndroidRuntime:     at android.view.LayoutInflater.rInflate(LayoutInflater.java:745)

11-26 12:22:16.418 8594-8594/? E/AndroidRuntime:     at android.view.LayoutInflater.parseInclude(LayoutInflater.java:839)

11-26 12:22:16.418 8594-8594/? E/AndroidRuntime:     at android.view.LayoutInflater.rInflate(LayoutInflater.java:745)

11-26 12:22:16.418 8594-8594/? E/AndroidRuntime:     at android.view.LayoutInflater.inflate(LayoutInflater.java:492)

11-26 12:22:16.418 8594-8594/? E/AndroidRuntime:     at android.view.LayoutInflater.inflate(LayoutInflater.java:397)

11-26 12:22:16.418 8594-8594/? E/AndroidRuntime:     at android.view.LayoutInflater.inflate(LayoutInflater.java:353)

11-26 12:22:16.418 8594-8594/? E/AndroidRuntime:     at android.support.v7.app.AppCompatDelegateImplV7.setContentView(AppCompatDelegateImplV7.java:249)

11-26 12:22:16.418 8594-8594/? E/AndroidRuntime:     at android.support.v7.app.AppCompatActivity.setContentView(AppCompatActivity.java:106)

11-26 12:22:16.418 8594-8594/? E/AndroidRuntime:     at unfailing35.test.MapActivity.onCreate(MapActivity.java:105)

11-26 12:22:16.418 8594-8594/? E/AndroidRuntime:     at android.app.Activity.performCreate(Activity.java:5275)

11-26 12:22:16.418 8594-8594/? E/AndroidRuntime:     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087)

11-26 12:22:16.418 8594-8594/? E/AndroidRuntime:     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2169)

11-26 12:22:16.418 8594-8594/? E/AndroidRuntime:     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2255) 

11-26 12:22:16.418 8594-8594/? E/AndroidRuntime:     at android.app.ActivityThread.handleRelaunchActivity(ActivityThread.java:3760) 

11-26 12:22:16.418 8594-8594/? E/AndroidRuntime:     at android.app.ActivityThread.access$900(ActivityThread.java:142) 

11-26 12:22:16.418 8594-8594/? E/AndroidRuntime:     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1209) 

11-26 12:22:16.418 8594-8594/? E/AndroidRuntime:     at android.os.Handler.dispatchMessage(Handler.java:102) 

11-26 12:22:16.418 8594-8594/? E/AndroidRuntime:     at android.os.Looper.loop(Looper.java:136) 

 

치솟음 (3,710 포인트) 님이 2015년 11월 27일 질문

1개의 답변

0 추천

MapActivity 라는 부모 액티비티가 onCreate를 호출했네요..?

MapFragment.java 부분에서 터치 이벤트가 너무 많이 들어갈것 같습니다. 

Touch 는 Touch DOWN 이나 UP 동작에서 한번만 수행되도록 코드를 수정하시던지 아니면

startAct 플래그를 명확하게 false 시켜야되는데 플래그가 false 가 되지 않은채로 return 이 됐네요.

라쎄린드 (25,460 포인트) 님이 2015년 11월 27일 답변
오..어디 로그를 보고 알게 되신건가요?
터치 로직이 Down, Up 시에 특정 뷰(한20~30개?) 들의 배경색을 바꾸는 건데..
그것때문인걸까요?

말씀하신
'startAct 플래그를 명확하게 false 시켜야되는데 플래그가 false 가 되지 않은채로 return 이 됐네요. ' 를 좀더 자세히 알려주시면 안될까요? 흑
MapFragment 의 onTouch 부분  return true 하면 이벤트가 consume 되서
startAct 부분이 한번밖에 안타나요? onTouch 는 TOUCH_UP, DOWN, MOVE 이벤트가 다 들어옵니다. 여러번 탈것 같으니 flag 를 명확하게 줘서 다시 못타도록 하라는 겁니다.

그리고 추가로 분석한걸 보니 onDestroy 가 왜 불리는지를 확인하는게 먼저일것 같네요.
...