Android横竖屏切换后,重新设置activity布局,ViewPager上无法正确显示Fragment

来源:互联网 发布:excel表格数据无法编辑 编辑:程序博客网 时间:2024/06/05 23:49
如题,
@Override
    public void onConfigurationChanged(Configuration newConfig) {
        clearnSurface();//清除Surface

        super.onConfigurationChanged(newConfig);
        if (this.getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE) {
            //land横屏
            Log.i("切换", "-横屏");
//横屏布局,并设为全屏
            setContentView(activity_block_land);
            params.flags |= WindowManager.LayoutParams.FLAG_FULLSCREEN;
            getWindow().setAttributes(params);
            getWindow().addFlags(WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS);
        } else if (this.getResources().getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT) {
            //port竖屏
            Log.i("切换", "-竖屏");
//竖屏布局,并设为非全屏
            setContentView(activity_block);
            params.flags &= (~WindowManager.LayoutParams.FLAG_FULLSCREEN);
            getWindow().setAttributes(params);
            getWindow().clearFlags(WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS);
        }
        initeActivity();//重新绑定控件和设置监听
        init();//还原数据(非重新获取,数据保存着的)
    }


假设进入Activity时是竖屏状态,然后切换到横屏:
切换布局都做到了,现在的情况就是在第一次切换横屏的时候,ViewPager不会显示Fragment,切换回去竖屏的时候会恢复原来的样子,然后在次切换到横屏ViewPager就正常显示了。

切换的布局是:
activity_block = LayoutInflater.from(this).inflate(R.layout.activity_block, null, true);
        activity_block_land = LayoutInflater.from(this).inflate(R.layout.activity_block_land, null, true);


已经给Activity设置了:
android:configChanges="keyboardHidden|orientation|screenSize"


这个是OnCreate方法:
@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        params = getWindow().getAttributes();
        activity_block = LayoutInflater.from(this).inflate(R.layout.activity_block, null, true);//竖屏布局
        activity_block_land = LayoutInflater.from(this).inflate(R.layout.activity_block_land, null, true);//横屏布局
        if (this.getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE) {
            //land横屏
            Log.i("当前", "-横屏");
            setContentView(activity_block_land);
            params.flags |= WindowManager.LayoutParams.FLAG_FULLSCREEN;
            getWindow().setAttributes(params);
            getWindow().addFlags(WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS);
        } else if (this.getResources().getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT) {
            //port竖屏
            Log.i("当前", "-竖屏");
            setContentView(activity_block);
            params.flags &= (~WindowManager.LayoutParams.FLAG_FULLSCREEN);
            getWindow().setAttributes(params);
            getWindow().clearFlags(WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS);
        }
        uuid = getIntent().getStringExtra("blockUuid");
        if (!initeActivity()) {//绑定控件
            this.finish();
            return;
        }
        fragmentEquipment_state = new Block_Status();//fragment1
        fragmentEquipment_control = new Block_Device();//framgent2
        adapter = new Block_ViewPagerAdapter(getSupportFragmentManager(), BlockActivity.this);//viewpager1的adapter
        adapter.addFragment(fragmentEquipment_state, "传感");//把fragment1添加到adapter
        adapter.addFragment(fragmentEquipment_control, "控制");//把fragment2添加到adapter

        blockResolve = new BlockResolve(BlockActivity.this);//实例化数据处理类,所有网络请求过来的数据将放在这里保存
        blockResolve.setmHandler(handler_block);
        if (videoPlayer == null) {
            videoPlayer = new VideoPlayer();//视频播放处理类
        }
        getData();//请求数据
        registerReceiver();//注册网络变化广播
    }

    private boolean initeActivity() {
        findViews();//里面都是些绑定控件(findViewById)
        m_osurfaceView.getHolder().addCallback(this);
        setListeners();//绑定控件的监听事件
        return true;
    }


这个是重新填充数据的:
public void init() {
        area_name.setText(getIntent().getStringExtra("from"));
        block_name.setText(getIntent().getStringExtra("fromCild"));
        videoPlayer.setSurfaceView(m_osurfaceView);
        setViewPager();//有问题的ViewPager,viewpager1
        setWeather();
        setTabSelection(0);//默认第一页

        initViewPager();//这个是显示纯图片的轮播图的ViewPager,没有出现问题
        blockResolve.firstSetData();//给viewpager1上的fragment填充数据
        setStatus();//设置视频播放状态
    }
//设置viewPager
    private void setViewPager() {
        viewPager.setAdapter(adapter);
        viewPager.setOffscreenPageLimit(adapter.getCount());
        tabLayout.setupWithViewPager(viewPager);
        tabLayout.setTabMode(TabLayout.MODE_FIXED);
    }

0 0
原创粉丝点击