54 android fragment android-activity
我有一组标签FragmentActivity,每个标签都有自己的片段.当我尝试通过一个onClickListener和使用该startActivity(myIntent)方法从该片段中启动一个新活动时,我的应用程序强制关闭.
环顾四周后,我找到了一个或两个被称为方法的参考startActivityFromFragment,但在搜索了大约一个小时之后,我找不到任何解释或如何使用它的例子,或者这是我应该使用的.
我想我要问的是,从活动启动新活动和从片段启动新活动之间是否有任何区别,如果是,我需要实现什么?
EkK*_*KoZ 50
你应该这样做 getActivity().startActivity(myIntent)
Jay*_*esh 45
我做到了,下面的代码对我有用....
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View v = inflater.inflate(R.layout.hello_world, container, false);
Button newPage = (Button)v.findViewById(R.id.click);
newPage.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(getActivity(), HomeActivity.class);
startActivity(intent);
}
});
return v;
}
Run Code Online (Sandbox Code Playgroud)
并且请确保您的目标活动应该在Manifest.xml文件中注册,
但在我的情况下,HomeActivity中没有显示所有选项卡,是否有任何解决方案?
Dav*_*tal 11
从片段启动活动和活动之间的区别在于如何获取上下文,因为在这两种情况下它都必须是一个活动.
来自活动:
上下文是当前活动(this)
Intent intent = new Intent(this, NewActivity.class);
startActivity(intent);
Run Code Online (Sandbox Code Playgroud)
从片段:
上下文是父活动(getActivity()).请注意,片段本身可以通过活动启动活动startActivity(),这不是必须从活动中完成的.
Intent intent = new Intent(getActivity(), NewActivity.class);
startActivity(intent);
Run Code Online (Sandbox Code Playgroud)
我是这样做的,从多个活动中出现的(自定义)菜单片段启动SendFreeTextActivity:
在MenuFragment类中:
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_menu, container, false);
final Button sendFreeTextButton = (Button) view.findViewById(R.id.sendFreeTextButton);
sendFreeTextButton.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
Log.d(TAG, "sendFreeTextButton clicked");
Intent intent = new Intent(getActivity(), SendFreeTextActivity.class);
MenuFragment.this.startActivity(intent);
}
});
...
Run Code Online (Sandbox Code Playgroud)