Android 怪诞的行为使行为无效

Android 怪诞的行为使行为无效,android,view,media-player,invalidation,Android,View,Media Player,Invalidation,我在自定义视图组(Custom1)中有一个自定义视图组(Custom2) Custom1有一个imageview,显示一个矩形可变形视图和两个文本视图 我在Custom2中设置了一个onClickListener,它使用this.removeViewAt(0)删除imageview并创建一个新的TextureView,然后调用this.addView(mTextureView,0),最后使其无效。然后我获得textureview,使用mediaplayer播放视频 代码如下: public vo

我在自定义视图组(Custom1)中有一个自定义视图组(Custom2)

Custom1有一个imageview,显示一个矩形可变形视图和两个文本视图

我在Custom2中设置了一个onClickListener,它使用this.removeViewAt(0)删除imageview并创建一个新的TextureView,然后调用this.addView(mTextureView,0),最后使其无效。然后我获得textureview,使用mediaplayer播放视频

代码如下:

public void setToTextureView() {
        //TextureView when not debugging
        TextureView View;
        View = (TextureView) new TextureView(mContext);
        View.setLayoutParams(new LayoutParams(600, 500));
        this.removeViewAt(0);
        this.addView(View, 0);
        View.invalidate();
        Log.d("Debug", "Invalidate Called");

        View.setSurfaceTextureListener(new TextureView.SurfaceTextureListener() {
            @Override
            public void onSurfaceTextureAvailable(SurfaceTexture surface, int width, int height) {
                Surface mSurface = new Surface(surface);

                MediaPlayer mMediaPlayer = new MediaPlayer(); //Debug MediaPlayer issues by setting ItemToDebug = "MediaPlayer"
                try {
                    mMediaPlayer.setDataSource(mContext, Uri.parse("android.resource://" + mContext.getPackageName() + "/" + R.raw.t));
                    if (ItemToDebug.equals("MediaPlayer")) {
                        Log.d("MediaPlayer", "Data source set");
                    }
                    mMediaPlayer.setSurface(mSurface);
                    if (ItemToDebug.equals("MediaPlayer")) {
                        Log.d("MediaPLayer", "Surface set");
                    }
                    mMediaPlayer.prepare();
                    if (ItemToDebug.equals("MediaPlayer")) {
                        Log.d("MediaPLayer", "Prepared");
                    }
                } catch (IOException e) {
                    Log.d("IOException", e.getMessage());
                }
                mMediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
                    @Override
                    public void onPrepared(MediaPlayer mp) {
                        if (ItemToDebug.equals("MediaPlayer")) {
                            Log.d("Debug", "Media Player Prepared");
                        }
                        mp.start();
                    }
                });
            }
现在,我奇怪地注意到,当我单击视图时,ImageView消失了,出现了一个空白区域(大小正确),但没有视频播放,尽管代码在invalidate()之前执行得很好

但是,当我中断程序并返回时,我可以获取TextureView以获取SurfacetTexture并播放视频(即按下按钮,将所有打开的程序带到屏幕,然后再次选择我的活动)

我不太清楚到底发生了什么,但我非常确定没有创建SurfacetTexture,因为没有调用onAttached()

有人知道会发生什么吗

干杯


J

视图消失,我需要调用requestLayout()以便在那里绘制其他内容。

尝试过hierarchyviewer吗?没有。谢谢你的提示…我去看看。然而,我仍然很好奇为什么会出现这个错误……我在过去做过几乎相同的事情,但这是第一次发生见我的相关问题。它不仅是textureviews,而且通常只是视图组。