当前位置: 代码迷 >> 综合 >> 浅析Fragment中startActivityForResult()与getActivity().startActivityForResult()的异同
  详细解决方案

浅析Fragment中startActivityForResult()与getActivity().startActivityForResult()的异同

热度:28   发布时间:2023-12-21 18:50:49.0
在Fragment类中启动另一个Activity并获取返回结果,可以使用this.startActivityForResult(),也可以使用getActivity().startActivityForResult()。那么,这两种方式有何异同呢?

先来看一个示例。

创建TestFragment类,继承自Fragment。添加一个按钮,点击后启动另一个Activity,重写Fragment类的onActivityResult()方法,打印requestCode参数。

package net.csdn.blog.fragment;public class TestFragment extends Fragment {@Nullable@Overridepublic View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {View view = inflater.inflate(R.layout.fragment, null);view.findViewById(R.id.button).setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {// startActivityForResult(new Intent(getContext(), OtherActivity.class), 1);// 或// getActivity().startActivityForResult(new Intent(getContext(), OtherActivity.class), 1);}});return view;}@Overridepublic void onActivityResult(int requestCode, int resultCode, Intent data) {super.onActivityResult(requestCode, resultCode, data);Log.i("test", "TestFragment onActivityResult() requestCode=" + requestCode);}
}

创建TestActivity类,继承自FragmentActivity。将上面创建的TestFragment添加进来,同样重写onActivityResult()方法打印requestCode参数。

package net.csdn.blog.fragment;public class TestActivity extends FragmentActivity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);getSupportFragmentManager().beginTransaction().replace(R.id.activity_main, new TestFragment()).commit();}@Overrideprotected void onActivityResult(int requestCode, int resultCode, Intent data) {super.onActivityResult(requestCode, resultCode, data);Log.i("test", "TestActivity onActivityResult() requestCode=" + requestCode);}
}
  相关解决方案