小孩子a 2014-03-04 08:44 采纳率: 0%
浏览 1713

android sliding中的viewpage切换变白

写在最前:
如果有朋友可以帮忙解决这个问题,请在底下留言,或者私信我,或者联系我qq:1065885952,谢谢了哈!!~

功能描述:
用sliding实现侧滑。首页是viewpage,包含三个fragment选项卡,可滑动切换。左侧是listview菜单,点击对应的item,首页的fragment会切换。
问题再现:
1. 首次加载进来,首页viewpage显示正常。
2. 切换到左侧菜单,选择第二项。第二项显示正常。
3. 切换到左侧菜单,选择首页(带有viewpage)的fragment,viewpage变白。

sliding初始化代码如下:

private void initSliding(Bundle savedInstanceState) {
    getSlidingMenu().setMode(SlidingMenu.LEFT);
    getSlidingMenu().setTouchModeAbove(SlidingMenu.TOUCHMODE_MARGIN);
    getSlidingMenu().setShadowWidthRes(R.dimen.shadow_width);
    getSlidingMenu().setShadowDrawable(R.drawable.shadow);
    getSlidingMenu().setBehindOffsetRes(R.dimen.slidingmenu_offset);
    getSlidingMenu().setFadeDegree(0.35f);

    if (savedInstanceState != null) {
        mContent = getSupportFragmentManager().getFragment(
                savedInstanceState, "mContent");
    }
    if (mContent == null) {

        mContent = Fragment_Choose.newInstance();
    }

    // 设置主界面的视图
    setContentView(R.layout.frame_main_content);
    getSupportFragmentManager().beginTransaction().replace(R.id.content_frame, mContent).commit();

    // 设置左边菜单打开后的视图界面
    setBehindContentView(R.layout.frame_left_content);
    getSupportFragmentManager().beginTransaction().replace(R.id.left_content_id, Fragment_LeftMenu.newInstance()).commit();

}

viewpage初始化代码如下:

public class BtmNaviSwitchAdapter extends FragmentPagerAdapter {
    private ArrayList<Fragment> mFragments;

    public BtmNaviSwitchAdapter(FragmentManager fm) {
        super(fm);
        mFragments = new ArrayList<Fragment>();
        mFragments.add(Fragment_Test.newInstance());
        mFragments.add(Fragment_Test.newInstance());
        mFragments.add(Fragment_Test.newInstance());
    }

    public BtmNaviSwitchAdapter(FragmentManager fm,
            ArrayList<Fragment> fragments) {
        super(fm);

    }

    @Override
    public int getCount() {
        return mFragments.size();
    }

    @Override
    public Fragment getItem(int position) {
        return mFragments.get(position);
    }

}

左侧菜单点击切换首页fragment代码如下:

mLeftListView.setOnItemClickListener(new OnItemClickListener() {

        @Override
        public void onItemClick(AdapterView<?> arg0, View arg1,
                int position, long arg3) {
            String key = "";
            switch (position) {
            case 0:
                key = "home";
                break;
            case 1:
                key = "emergencies";
                break;

            default:

                break;
            }

            Activity_Home ma = (Activity_Home) getActivity();
            ma.switchContent(key);

        }
    });

public void switchContent(String key) {
    if (mContent.equals(mFragmentList.get(key))) {
        showMainContent();
        return;
    }
    mContent = mFragmentList.get(key);
    getSupportFragmentManager().beginTransaction()
            .replace(R.id.content_frame, mFragmentList.get(key)).commit();
    getSlidingMenu().showContent();
}
  • 写回答

1条回答 默认 最新

  • 你知我知皆知 2024-08-01 19:51
    关注

    以下回答参考 皆我百晓生券券喵儿 等免费微信小程序相关内容作答,并由本人整理回复。

    这个问题可能是因为滑动切换时,页面布局发生了变化导致的。为了解决这个问题,你可以尝试以下方法:

    1. 检查布局的变化:首先确认在切换页面的过程中是否有任何布局改变。这可能是由于滑动区域的大小发生变化,导致布局发生调整。你可以通过在onCreate()方法中调用super.onCreate(savedInstanceState);来确保所有子类都继承了这个方法,并且在滑动过程中重新创建视图。

    2. 使用Viewpager代替viewpage:如果你的页面结构允许的话,考虑将viewpage替换为viewpagerviewpager在滑动过程中不会更改布局,因此应该更容易处理。

    3. 使用平移动画替代滑动:如果可能的话,考虑使用平移动画替代滑动。这样可以更自然地过渡到新页面,同时避免在页面之间切换时出现明显的视觉冲击。

    4. 优化布局管理:确保你在onCreate()onPostCreate()方法中正确设置了滑动布局。这些方法可以在滑动开始后被调用,以确保在切换前后保持一致的布局。

    5. 使用Fragment生命周期管理器:Android提供了Fragment生命周期管理器,可以帮助你更好地控制页面之间的切换。例如,在onSaveInstanceState()方法中保存当前状态,然后在onRestoreInstanceState()方法中恢复状态。

    以上是一些可能解决问题的方法。具体解决方案可能会根据你的项目需求有所不同,所以建议你根据实际情况进行调整。

    评论

报告相同问题?