android– 使用FragmentStatePagerAdapater“指定的子节点已经有父节点”错误

android– 使用FragmentStatePagerAdapater“指定的子节点已经有父节点”错误,第1张

概述我试图实现所有类似问题的一些解决方案,但它们似乎都不适用于我的情况.我的情况略有不同,因为我没有从xml获取surfaceview,而是通过SurfaceView类创建它并将其添加到FrameLayout.我这样做是因为我想在创建曲面时使用媒体播放器.logcat的07-1211:02:28.221:E/AndroidRuntim

我试图实现所有类似问题的一些解决方案,但它们似乎都不适用于我的情况.我的情况略有不同,因为我没有从xml获取surfacevIEw,而是通过SurfaceVIEw类创建它并将其添加到FrameLayout.我这样做是因为我想在创建曲面时使用媒体播放器.

logcat的

    07-12 11:02:28.221: E/AndroIDRuntime(7055): FATAL EXCEPTION: main07-12 11:02:28.221: E/AndroIDRuntime(7055): java.lang.IllegalStateException: The specifIEd child already has a parent. You must call removeVIEw() on the child's parent first.07-12 11:02:28.221: E/AndroIDRuntime(7055):     at androID.vIEw.VIEwGroup.addVIEwInner(VIEwGroup.java:3337)07-12 11:02:28.221: E/AndroIDRuntime(7055):     at androID.vIEw.VIEwGroup.addVIEw(VIEwGroup.java:3208)07-12 11:02:28.221: E/AndroIDRuntime(7055):     at androID.vIEw.VIEwGroup.addVIEw(VIEwGroup.java:3165)07-12 11:02:28.221: E/AndroIDRuntime(7055):     at androID.vIEw.VIEwGroup.addVIEw(VIEwGroup.java:3145)07-12 11:02:28.221: E/AndroIDRuntime(7055):     at androID.support.v4.app.NoSaveStateFrameLayout.wrap(NoSaveStateFrameLayout.java:40)07-12 11:02:28.221: E/AndroIDRuntime(7055):     at androID.support.v4.app.FragmentManagerImpl.movetoState(FragmentManager.java:915)07-12 11:02:28.221: E/AndroIDRuntime(7055):     at androID.support.v4.app.FragmentManagerImpl.movetoState(FragmentManager.java:1088)07-12 11:02:28.221: E/AndroIDRuntime(7055):     at androID.support.v4.app.BackStackRecord.run(BackStackRecord.java:682)07-12 11:02:28.221: E/AndroIDRuntime(7055):     at androID.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1444)07-12 11:02:28.221: E/AndroIDRuntime(7055):     at androID.support.v4.app.FragmentManagerImpl.executePendingTransactions(FragmentManager.java:461)07-12 11:02:28.221: E/AndroIDRuntime(7055):     at androID.support.v4.app.FragmentStatePagerAdapter.finishUpdate(FragmentStatePagerAdapter.java:163)07-12 11:02:28.221: E/AndroIDRuntime(7055):     at androID.support.v4.vIEw.VIEwPager.populate(VIEwPager.java:1064)07-12 11:02:28.221: E/AndroIDRuntime(7055):     at androID.support.v4.vIEw.VIEwPager.populate(VIEwPager.java:911)07-12 11:02:28.221: E/AndroIDRuntime(7055):     at androID.support.v4.vIEw.VIEwPager.onMeasure(VIEwPager.java:1432)07-12 11:02:28.221: E/AndroIDRuntime(7055):     at androID.vIEw.VIEw.measure(VIEw.java:12892)07-12 11:02:28.221: E/AndroIDRuntime(7055):     at androID.Widget.relativeLayout.measureChildHorizontal(relativeLayout.java:594)07-12 11:02:28.221: E/AndroIDRuntime(7055):     at androID.Widget.relativeLayout.onMeasure(relativeLayout.java:376)07-12 11:02:28.221: E/AndroIDRuntime(7055):     at androID.vIEw.VIEw.measure(VIEw.java:12892)07-12 11:02:28.221: E/AndroIDRuntime(7055):     at androID.vIEw.VIEwGroup.measureChilDWithmargins(VIEwGroup.java:4698)07-12 11:02:28.221: E/AndroIDRuntime(7055):     at androID.Widget.FrameLayout.onMeasure(FrameLayout.java:293)07-12 11:02:28.221: E/AndroIDRuntime(7055):     at androID.vIEw.VIEw.measure(VIEw.java:12892)07-12 11:02:28.221: E/AndroIDRuntime(7055):     at androID.Widget.linearLayout.measureVertical(linearLayout.java:812)07-12 11:02:28.221: E/AndroIDRuntime(7055):     at androID.Widget.linearLayout.onMeasure(linearLayout.java:553)07-12 11:02:28.221: E/AndroIDRuntime(7055):     at androID.vIEw.VIEw.measure(VIEw.java:12892)07-12 11:02:28.221: E/AndroIDRuntime(7055):     at androID.vIEw.VIEwGroup.measureChilDWithmargins(VIEwGroup.java:4698)07-12 11:02:28.221: E/AndroIDRuntime(7055):     at androID.Widget.FrameLayout.onMeasure(FrameLayout.java:293)07-12 11:02:28.221: E/AndroIDRuntime(7055):     at com.androID.internal.policy.impl.PhoneWindow$DecorVIEw.onMeasure(PhoneWindow.java:2268)07-12 11:02:28.221: E/AndroIDRuntime(7055):     at androID.vIEw.VIEw.measure(VIEw.java:12892)07-12 11:02:28.221: E/AndroIDRuntime(7055):     at androID.vIEw.VIEwRootImpl.performTraversals(VIEwRootImpl.java:1159)07-12 11:02:28.221: E/AndroIDRuntime(7055):     at androID.vIEw.VIEwRootImpl.handleMessage(VIEwRootImpl.java:2545)07-12 11:02:28.221: E/AndroIDRuntime(7055):     at androID.os.Handler.dispatchMessage(Handler.java:99)07-12 11:02:28.221: E/AndroIDRuntime(7055):     at androID.os.Looper.loop(Looper.java:137)07-12 11:02:28.221: E/AndroIDRuntime(7055):     at androID.app.ActivityThread.main(ActivityThread.java:4507)07-12 11:02:28.221: E/AndroIDRuntime(7055):     at java.lang.reflect.Method.invokeNative(Native Method)07-12 11:02:28.221: E/AndroIDRuntime(7055):     at java.lang.reflect.Method.invoke(Method.java:511)07-12 11:02:28.221: E/AndroIDRuntime(7055):     at com.androID.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:790)07-12 11:02:28.221: E/AndroIDRuntime(7055):     at com.androID.internal.os.ZygoteInit.main(ZygoteInit.java:557)07-12 11:02:28.221: E/AndroIDRuntime(7055):     at dalvik.system.NativeStart.main(Native Method)

我的代码如下:

VIDeoFragment.java

public class VIDeoFragment extends Fragment{private static final String TAG = "Fuck this";static String vpath;static Context cxt;static int pos;static VIDeoFragment newInstance(int position, Cursor cursor, Context context) {    pos = position;    cursor.movetoposition(position);    vpath = cursor.getString(cursor.getColumnIndex(MediaStore.VIDeo.Media.DATA));    cxt = context;    VIDeoFragment f = new VIDeoFragment();    Bundle args = new Bundle();    args.putInt("position", position);    f.setArguments(args);    return f;}@OverrIDepublic voID onCreate(Bundle savedInstanceState) {    super.onCreate(savedInstanceState);    //mNum = getArguments() != null ? getArguments().getInt("num") : 1;}@OverrIDepublic VIEw onCreateVIEw(LayoutInflater inflater, VIEwGroup container,        Bundle savedInstanceState) {    VIEw v = inflater.inflate(R.layout.full_image, container, false);    FrameLayout prevIEw = (FrameLayout) v.findVIEwByID(R.ID.framelayout);    VIDVIEw vIDvIEw = new VIDVIEw(cxt);    prevIEw.addVIEw(vIDvIEw, pos);    return prevIEw;}public class VIDVIEw extends SurfaceVIEw implements SurfaceHolder.Callback {    MediaPlayer player;    public VIDVIEw(Context context) {        super(context);        // Todo auto-generated constructor stub    }    @OverrIDe    public voID surfaceCreated(SurfaceHolder holder) {        player = new MediaPlayer();        player.setdisplay(holder);    try {        player.setDataSource(vpath);        player.prepare();    } catch (IllegalStateException e) {        e.printstacktrace();    } catch (IOException e) {        e.printstacktrace();    }    }    @OverrIDe    public voID surfaceDestroyed(SurfaceHolder holder) {          if (player != null){            if ( player.isPlaying() )                player.stop();        player.reset();        player.release();        player = null;        }    }    @OverrIDe    public voID surfaceChanged(SurfaceHolder holder, int format, int wIDth, int height)   {     }}

Activity和FragmentStatePagerAdapater

public class FullimageActivity extends FragmentActivity  {private static final String TAG = "MediaPlayer shit";//MediaPlayer player;//SurfaceVIEw surfacevIEw;SurfaceHolder surfaceHolder;GrIDvIEw grIDvIEw = new GrIDvIEw();int wIDth;int height;Cursor cursor;VIEwPager vIEwpager;PagerAdapter pageradapter;String path;int position;String[] projection = { GrIDvIEwData.ROWID, GrIDvIEwData.BITMAPPATH, GrIDvIEwData.VIDEOfilePATH};@OverrIDeprotected voID onCreate(Bundle savedInstanceState) {    super.onCreate(savedInstanceState);    setContentVIEw(R.layout.image_pager);    Intent i = getIntent();    position = i.getExtras().getInt("position");    path = i.getExtras().getString("vIDeopath");    cursor = getContentResolver().query(MediaStore.VIDeo.Media.EXTERNAL_CONTENT_URI,                                 grIDvIEw.mediaColumns,                                 MediaStore.VIDeo.Media.DATA + " like ?",                                 new String[] {Environment.getExternalStorageDirectory().getPath() + "/Reelcam/TheReelcams/%"},                                 null);     pageradapter = new PagerAdapter(getSupportFragmentManager());    vIEwpager = (VIEwPager) findVIEwByID(R.ID.pager);    //vIEwpager.setoffscreenPagelimit(1);    vIEwpager.setAdapter(pageradapter);}@OverrIDeprotected voID onPause() {    super.onPause();}@OverrIDeprotected voID onResume() {    //surfacevIEw.setVisibility(VIEw.VISIBLE);    super.onResume();}@OverrIDeprotected voID onDestroy() {    cursor.close();    super.onDestroy();}public class PagerAdapter extends FragmentStatePagerAdapter{    public PagerAdapter(FragmentManager fm) {        super(fm);        // Todo auto-generated constructor stub    }    @OverrIDe    public voID destroyItem(VIEwGroup container, int position, Object object) {        container.removeVIEw((VIEw) object);                }    @OverrIDe    public Fragment getItem(int position) {        Log.i(TAG, "in getitem");        return VIDeoFragment.newInstance(position, cursor, getApplicationContext());    }    @OverrIDe    public int getCount() {        // Todo auto-generated method stub        return cursor.getCount();    }}

解决方法:

这里:

VIEw v = inflater.inflate(R.layout.full_image, container, false);FrameLayout prevIEw = (FrameLayout) v.findVIEwByID(R.ID.framelayout);. . . . . . return prevIEw;

您正在将full_image布局膨胀为v.但是您要返回另一个ID frameLayout视图,该视图可能已经在布局中具有父级(可能是v).返回v代替.

确保返回没有父级的VIEw.查看R.layout.full_image,看看是否已将R.ID.framelayout包含在父VIEwGroup中.

总结

以上是内存溢出为你收集整理的android – 使用FragmentStatePagerAdapater“指定的子节点已经有父节点”错误全部内容,希望文章能够帮你解决android – 使用FragmentStatePagerAdapater“指定的子节点已经有父节点”错误所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/1116413.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-29
下一篇2022-05-29

发表评论

登录后才能评论

评论列表(0条)

    保存