0

저는 앱을 시작할 때 애셋에서 사진을로드하는 로더 클래스를 가지고 있습니다.ViewFlipper Inflater 불법적 인 예외

그런 다음 몇 가지 버튼이있는 기본 메뉴가 있습니다. 하나의 버튼을 클릭하면 새로운 레이아웃이 LoadField 클래스의 그림을로드하는 ViewFlipper와 함께 제공됩니다. ViewFlipper 활동을 주 메뉴로 종료하고 ViewFlipper를 다시 시작하면 Illegalstateexception이 발생합니다. 여기

public void inflate(){ 

    for(int i =0;i< createArray();i++){ 
    view = LayoutInflater.from(getApplicationContext()).inflate(R.layout.bilder, null); 
    viewInflate.add(view); 
    } 

    Toast.makeText(getApplicationContext(), "" +viewInflate.size(), Toast.LENGTH_LONG).show(); 
    addPics(); 
} 


    public void addPics(){ 
    for(int i =0;i< createArray();i++){ 
     View pic = viewInflate.get(i).findViewById(R.id.ImageView01); 
     View pic2 = viewInflate.get(i).findViewById(R.id.ImageView02); 

     ((ImageView) pic).setImageBitmap((Bitmap)frontPic.get(i)); 
     ((ImageView) pic2).setImageBitmap((Bitmap)backPic.get(i)); 
    } 
} 

그리고 내 ViewFlipper 이미지 가져 오기 방법 : frontPic, backPic 및 viewInflate

public void loadInto(int i) { 

    flipper.addView((View) LoadingScreen.viewInflate.get(i));  
} 

이 ArrayLists 있습니다

여기 내 로더 클래스입니다.

나는 ViewFlipper의 모든 하위 항목을 제거하기 전에 새로운 항목을 추가해야한다는 것을 알고 있습니다.

07-16 16:41:46.468: E/AndroidRuntime(26720): java.lang.RuntimeException: Unable to   start activity ComponentInfo{com.example.myapp/com.example.myapp.psuflip}: java.lang.IllegalStateException: The specified child already has a parent. You must call removeView() on the child's parent first. 
07-16 16:41:46.468: E/AndroidRuntime(26720): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2180) 
07-16 16:41:46.468: E/AndroidRuntime(26720): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2230) 
07-16 16:41:46.468: E/AndroidRuntime(26720): at android.app.ActivityThread.access$600(ActivityThread.java:141) 
07-16 16:41:46.468: E/AndroidRuntime(26720): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1234) 
07-16 16:41:46.468: E/AndroidRuntime(26720): at android.os.Handler.dispatchMessage(Handler.java:99) 
07-16 16:41:46.468: E/AndroidRuntime(26720): at android.os.Looper.loop(Looper.java:137) 
07-16 16:41:46.468: E/AndroidRuntime(26720): at android.app.ActivityThread.main(ActivityThread.java:5041) 
07-16 16:41:46.468: E/AndroidRuntime(26720): at java.lang.reflect.Method.invokeNative(Native Method) 
07-16 16:41:46.468: E/AndroidRuntime(26720): at java.lang.reflect.Method.invoke(Method.java:511) 
07-16 16:41:46.468: E/AndroidRuntime(26720): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793) 
07-16 16:41:46.468: E/AndroidRuntime(26720): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560) 
07-16 16:41:46.468: E/AndroidRuntime(26720): at dalvik.system.NativeStart.main(Native Method) 
07-16 16:41:46.468: E/AndroidRuntime(26720): Caused by: java.lang.IllegalStateException: The specified child already has a parent. You must call removeView() on the child's parent first. 
07-16 16:41:46.468: E/AndroidRuntime(26720): at android.view.ViewGroup.addViewInner(ViewGroup.java:3339) 
07-16 16:41:46.468: E/AndroidRuntime(26720): at android.view.ViewGroup.addView(ViewGroup.java:3210) 
07-16 16:41:46.468: E/AndroidRuntime(26720): at android.widget.ViewAnimator.addView(ViewAnimator.java:184) 
07-16 16:41:46.468: E/AndroidRuntime(26720): at android.view.ViewGroup.addView(ViewGroup.java:3155) 
07-16 16:41:46.468: E/AndroidRuntime(26720): at android.view.ViewGroup.addView(ViewGroup.java:3131) 
07-16 16:41:46.468: E/AndroidRuntime(26720): at com.example.myapp.psuflip.inflate(psuflip.java:392) 
07-16 16:41:46.468: E/AndroidRuntime(26720): at com.example.myapp.psuflip.createFlipper(psuflip.java:374) 
07-16 16:41:46.468: E/AndroidRuntime(26720): at com.example.myapp.psuflip.onCreate(psuflip.java:105) 
07-16 16:41:46.468: E/AndroidRuntime(26720): at android.app.Activity.performCreate(Activity.java:5104) 
07-16 16:41:46.468: E/AndroidRuntime(26720): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1080) 
07-16 16:41:46.468: E/AndroidRuntime(26720): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2144) 
+0

당신을, 우리는 오류의 원인을 찾기 위해 로그 캣이 필요합니다. 여기에 게시 하시겠습니까? – Snicolas

+0

나는 그것을 편집 ...... – Billabong

답변

1

표시되는 코드와 logcat 출력이 일치하지 않습니다.

오류는 inflate 메소드에서 addlook을 호출하는 psupflip.java 파일의 392 행이 잘못되었다고 말합니다.

그래서 logcat을 가져 오기 전에 일부 코드를 옮겼습니다.

오류는이 라인에서, 당신이 보여 코드에서 올 수 있습니다 :

flipper.addView((View) LoadingScreen.viewInflate.get(i));  

기회는 당신 같은 매개 변수를 사용하여이 코드를 여러 시간을 부르는 있습니다. 따라서보기 그룹에 동일한보기를 두 번 추가하십시오. 하지만보기에는 하나의 상위 항목 만있을 수 있으며 이와 같은 다른 상위 항목에 다시 추가 할 수는 없습니다. 첫 번째 상위보기 그룹에서 제거해야합니다 (실제로 logcat이 말한 항목).

java naming conventions에 더 가까이 머물러보십시오. how to read logcat errors을 배우면 개발에 더욱 도움이 될 것입니다.

--update

부모에서보기를 제거하려면이 시도

:

View v = (View) LoadingScreen.viewInflate.get(i); 
v.getParent.removeView(v); 
+0

예, 내 코드에서 버그를 찾으려고, 어쩌면 내가 일부 코드를 변경했습니다. 당신 말이 맞아요. 나는 그것을 먼저 제거해야한다는 것을 알고 있지만, 어떻게 해야할지 모르겠습니다. 그러나 뷰 그룹을 제거하려고하면이 오류가 발생합니다. – Billabong

+0

부모로부터 뷰를 제거하는 방법에 대한 예제를 제공하기 위해 필자의 대답이 업데이트되었습니다. – Snicolas

+0

아주 좋습니다 – Billabong