Fragment从Activity获取数据

写在开头:实践了大大的思路–> Android Fragment与Activity之间的数据交换(Fragment从Activity获取数据)

问题:当手机开启自动旋转时,进入Fragment(这里面加载一个网格布局)时,横屏情况下网格布局列数应该是4列,竖屏情况下2列,但是第一次横屏进去时,一直显示2列,这就导致了内容拉伸

解决:
1、判断手机是不是开启了自动旋转
这里引用自–> 安卓手机 自动旋转 功能开启状态获取
感谢CoderUp大大~

Activity中:

int spanCount;
FragmentTransaction ft;

@Override
    public void onCreate(Bundle savedInstanceState) {
        ...
        // 创建Fragment(MyFragment是自定义的)
        Fragment fragment = new MyFragment(type);
        // 手机开启了自动旋转
        if (isScreenAutoRotate(getApplicationContext())){
            // 横屏情况
            if(判断是不是横屏){
                // 设置横屏的列数
                spanCount = 4;
                // 保存数据 - (在Fragment中调用) - 网格布局的列数
                Bundle bundle = new Bundle();
                bundle.putInt("spanCount",spanCount);
                fragment.setArguments(bundle);
            }
        }
        //启动编辑操作-获取到 FragmentTransaction 类的实例
        ft = getSupportFragmentManager().beginTransaction();
        //替换添加到容器中的现有片段
        ft.replace(R.id.View, fragment, "preview");
        //提交-FragmentTransaction的最后一步:commit(),不会立即生效
        ft.commit();
        ...
    }

/** 判断是否开启了 “屏幕自动旋转”,true则为开启 */
    public static boolean isScreenAutoRotate(Context context) {
        int gravity = 0;
        try {
            gravity = Settings.System.getInt(context.getContentResolver(),
                    Settings.System.ACCELEROMETER_ROTATION);
        } catch (Settings.SettingNotFoundException e) {
            e.printStackTrace();
        }
        return gravity == 1;
    }

2、在Fragment中获取

@Override
    public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
        super.onViewCreated(view, savedInstanceState);
        ...
        // 获取Activity中的spanCount
        Bundle bundle = getArguments();
        if (bundle != null){
            list_LayoutManager(bundle.getInt("spanCount"));
        }else { }
        ...
    }



//自动旋转且横屏时 - 列表布局管理的列数为在Activity获取的spanCount
    public void list_LayoutManager(int spanCount){
        manager = new GridLayoutManager(getContext(), spanCount);
        //网格布局管理器-设置item占据几个位置
        manager.setSpanSizeLookup(new GridLayoutManager.SpanSizeLookup() {
            @Override
            public int getSpanSize(int position) {
                //标题的话占spanCount个位置
                if (mData2.get(position).isTitle()){ return spanCount; }
                //非标题的占1个位置
                else return 1;
            }
        });
        rc_list.setLayoutManager(manager);
    }
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值