android getinstance 方法,Android中的'new Fragment()'和'Fragment.getInstance()'有什么区别?...

当我们片段添加到特定的布局,

我们可以使用folloing码

Fragment fragment = new SampleFragment();

FragmentManager fragmentManager = getSupportFragmentManager();

FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();

fragmentTransaction.replace(R.id.content_layout, fragment);

fragmentTransaction.commit();

Fragment fragment = SampleFragment.getInstance();

FragmentManager fragmentManager = getSupportFragmentManager();

FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();

fragmentTransaction.replace(R.id.content_layout, fragment);

fragmentTransaction.commit();

我不明白是什么区别片段对象定义句子。 从某些来源,当使用'Fragment.getInstance()'类似单例模​​式时,使用'getInstance(Bundle data)'方法参数将包数据传递给片段。

你能告诉我有什么区别吗?

+0

[此链接可能会帮助你,请访问这里一次](http://stackoverflow.com/questions/9245408/best-practice-for-instantiating-a-new-android-fragment) –

+0

http:// www .androiddesignpatterns.com/2012/05/using-newinstance-to-instantiate.html此链接必须帮助您 –

Android ,要想跨模块调用 Fragment,可以使用以下几种方式: 1. 通过接口回调:在 Fragment 所在的模块定义一个接口,调用方实现该接口并将实现类传递给 Fragment 所在的模块,在 Fragment 调用实现类方法。 2. 通过广播通知:通过广播发送数据,接收方注册广播接收器并接收数据,在接收到数据后使用 FragmentManager 在需要的地方替换 Fragment。 3. 通过 ARouter 实现跨模块调用:ARouter 是阿里巴巴开源的一款 Android 路由框架,可以实现模块间的跨越调用,包括跨模块调用 Fragment。 具体实现方式如下: 1. 通过接口回调实现: 在 Fragment 所在的模块定义一个接口,例如: ```java public interface OnFragmentInteractionListener { void onFragmentInteraction(Uri uri); } ``` 在实现该接口的 Activity 或 Fragment 实现该接口,并将实现类传递给 Fragment 所在的模块,例如: ```java public class MainActivity extends AppCompatActivity implements OnFragmentInteractionListener { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Fragment fragment = new MyFragment(); ((MyFragment) fragment).setOnFragmentInteractionListener(this); getSupportFragmentManager().beginTransaction() .replace(R.id.container, fragment) .commit(); } @Override public void onFragmentInteraction(Uri uri) { // TODO: 处理 Fragment 回调 } } ``` 在 Fragment 调用接口方法,例如: ```java public class MyFragment extends Fragment { private OnFragmentInteractionListener mListener; public void setOnFragmentInteractionListener(OnFragmentInteractionListener listener) { mListener = listener; } private void doSomething() { // TODO: 处理业务逻辑 mListener.onFragmentInteraction(Uri.parse("something")); } // ... } ``` 2. 通过广播通知实现: 在 Fragment 所在的模块发送广播,例如: ```java Intent intent = new Intent("my_action"); intent.putExtra("data", "hello world"); LocalBroadcastManager.getInstance(getContext()).sendBroadcast(intent); ``` 在需要接收广播的 Activity 或 Fragment 注册广播接收器,例如: ```java public class MainActivity extends AppCompatActivity { private MyFragment mFragment; private BroadcastReceiver mReceiver = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { String data = intent.getStringExtra("data"); if (mFragment != null) { FragmentTransaction transaction = getSupportFragmentManager().beginTransaction(); transaction.replace(R.id.container, mFragment); transaction.commit(); } } }; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mFragment = new MyFragment(); IntentFilter filter = new IntentFilter("my_action"); LocalBroadcastManager.getInstance(this).registerReceiver(mReceiver, filter); // ... } // ... @Override protected void onDestroy() { super.onDestroy(); LocalBroadcastManager.getInstance(this).unregisterReceiver(mReceiver); } } ``` 在 Fragment 替换 Fragment,例如: ```java public class MyFragment extends Fragment { // ... private BroadcastReceiver mReceiver = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { FragmentTransaction transaction = getFragmentManager().beginTransaction(); transaction.replace(R.id.container, new AnotherFragment()); transaction.commit(); } }; @Override public void onResume() { super.onResume(); IntentFilter filter = new IntentFilter("my_action"); LocalBroadcastManager.getInstance(getContext()).registerReceiver(mReceiver, filter); } @Override public void onPause() { super.onPause(); LocalBroadcastManager.getInstance(getContext()).unregisterReceiver(mReceiver); } // ... } ``` 3. 通过 ARouter 实现跨模块调用: 在需要调用的 Fragment 所在的模块定义一个路由路径,例如: ```java @Route(path = "/test/fragment") public class TestFragment extends Fragment { // ... } ``` 在调用方模块使用 ARouter 跳转到需要调用的 Fragment,例如: ```java ARouter.getInstance().build("/test/fragment").navigation(); ``` 在 Application 初始化 ARouter,例如: ```java public class MyApplication extends Application { @Override public void onCreate() { super.onCreate(); ARouter.init(this); } } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值