
我试图实现所有类似问题的一些解决方案,但它们似乎都不适用于我的情况.我的情况略有不同,因为我没有从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“指定的子节点已经有父节点”错误所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)