Fragment利用newInstance动态工厂方法来创建多个Fragment

newInstance()方法这个是一种“静态工厂方法",需要的时候来调用去实例化;

让我们在初始化和设置一个新的fragment的时候免得去一一创建 。

 调用MyFragment.newInstance(index)去动态创建Fragment

public class MainActivity extends AppCompatActivity {

    private RadioGroup radioGroup;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        radioGroup = findViewById(R.id.radiogroup);
        //默认选中一个
        radioGroup.check(R.id.radio0);
        //默认加一个
        newFragmant(MainFragment.newInstance(0));
        //设置监听
        radioGroup.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(RadioGroup group, int checkedId) {
                //获取当前选值得id
                int id = radioGroup.indexOfChild(group.findViewById(checkedId));
                //打印获取到的角标id
                Log.i("id", "onCheckedChanged: " + id);
                //根据id创建Fragment
                newFragmant(MainFragment.newInstance(id));
            }
        });
     }
    //创建Fragment
    private void newFragmant(Fragment fragment) {
        //获取管理者开事务
        FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
        //是否添加过-->添加过显示-->没添加过得添加
        if (fragment.isAdded()) {
            transaction.show(fragment).commit();
        } else {
            transaction.add(R.id.fragment, fragment).commit();
        }
        //只要fragment不等于空 就隐藏当前的
        if (preFragment != null) {
            transaction.hide(preFragment);
        }
        preFragment = fragment;
    }
}

Fragment静态工厂写法:

自定义一个MyFragment类,继承V4包Fragment;

public class MyFragment extends Fragment {
    @Override
    public void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        Bundle bundle = getArguments();
        if (bundle != null) {
            int index = bundle.getInt("index");
            //打印当前执行页面
            Log.i("myFragment", "onCreate: " + index);
        }
    }

    @Nullable
    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.pager_frag, null, false);
        
        return view;
    }
    
    //调用该方法时需要传入下标参数
    public static MyFragment newInstance_pager(int index) {
        //实例化对象
        MyFragment_pager myFragment = new MyFragment_pager();
        //Bundle类型
        Bundle args = new Bundle();
        //将下标放入以‘key’‘value’Bundle
        args.putInt("index", index);
        //利用setArguments传参数
        myFragment.setArguments(args);
        return myFragment;
    }
}

猜你喜欢

转载自blog.csdn.net/weixin_43917449/article/details/86176623