我在FragmentActivity
内有一组标签,每个标签都有自己的片段。当我尝试通过onClickListener
并使用startActivity(myIntent)
方法从该片段中开始新活动时,我的申请人关闭了。
环顾四周后,我找到了一个名为startActivityFromFragment
的方法的参考或两个,但在搜索了一个小时左右后,我找不到任何解释或如何使用它的例子或这是否是我应该使用的。
我想我要问的是,从活动启动新活动与从片段启动新活动之间是否有任何区别,如果是,我需要实现什么?
答案 0 :(得分:49)
您应该使用getActivity().startActivity(myIntent)
答案 1 :(得分:43)
我做到了,下面的代码对我有用....
@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;
}
并确保您的目标活动应在Manifest.xml文件中注册,
但在我的情况下,HomeActivity中没有显示所有标签,是否有任何解决方案?
答案 2 :(得分:11)
从片段和活动开始活动之间的区别在于你如何获得上下文,因为在这两种情况下它都必须是一个活动。
来自某项活动:
上下文是当前活动(this
)
Intent intent = new Intent(this, NewActivity.class);
startActivity(intent);
来自片段:
上下文是父活动(getActivity()
)。请注意,片段本身可以通过startActivity()
启动活动,这不是必须从活动中完成的。
Intent intent = new Intent(getActivity(), NewActivity.class);
startActivity(intent);
答案 3 :(得分:6)
我是这样做的,从多个活动中出现的(自定义)菜单片段启动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);
}
});
...
答案 4 :(得分:1)
使用片段所在的Activity的Base Context启动Intent。
Intent j = new Intent(fBaseCtx, NewactivityName.class);
startActivity(j);
其中fBaseCtx
是您当前活动的BaseContext
。
您可以将其设为fBaseCtx = getBaseContext();