嵌套片段-No activity 处理意图
Nested fragment-No activity to handle intent
我有一个 activity,其中动态添加了片段 A。现在,我从片段 A 处理到片段 B。然后从片段 B 处理到片段 C。现在我在这里有一个按钮,单击时会拨打电话。我无法启动呼叫意图,错误日志显示非法状态异常 - 未找到 activity 来处理该意图。这是否意味着没有找到嵌套片段 C 的 activity?这怎么可能发生(没有 activity 的片段创建)?此外,所有片段都是在 运行 时间内动态创建的。
我尝试使用 getfragmentmanager() 和 getchildfragmentmanager() 方法。
在这两种情况下我都面临这个错误。任何建议将不胜感激。
这是我的代码片段
将片段 A 附加到 activity
FragmentManager fm = getFragmentManager();
FragmentTransaction ft = fm.beginTransaction();
ft.add(R.id.container,FragmentA_.builder().build());
ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE);
ft.addToBackStack(null);
ft.commit();
用片段 B 替换片段 A
FragmentManager fm = getFragmentManager();
FragmentTransaction ft = fm.beginTransaction();
ft.replace(R.id.container, FragmentB_.builder().build());
ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE);
ft.addToBackStack(null);
ft.commit();
用片段 C 替换片段 B
FragmentManager fm = getFragmentManager();
FragmentTransaction ft = fm.beginTransaction();
ft.replace(R.id.container, FragmentC_.builder().build());
ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE);
ft.addToBackStack(null);
ft.commit();
呼叫意图
public void call(String contact){
Intent i=new Intent(Intent.ACTION_CALL, Uri.parse("tel:"+contact));
getActivity().startActivity(i);
}
在我的 manifest.xml 中,我添加了通话的所有权限。
编辑 - 2
片段C代码
@EFragment(R.layout.fragment_c)
public class FragmentC extends Fragment
{
@Click(R.id.call_button)
void call(){
call(phone_number);
}
public void call(String contact){
Intent i=new Intent(Intent.ACTION_CALL, Uri.parse("tel:"+contact));
getActivity().startActivity(i);
}
}
去掉getActivity()直接调用startActivity(i)
片段有自己的 startActivity() 方法。在这种情况下,您不需要传递 activity 上下文或引用。更多信息:Click here
我有一个 activity,其中动态添加了片段 A。现在,我从片段 A 处理到片段 B。然后从片段 B 处理到片段 C。现在我在这里有一个按钮,单击时会拨打电话。我无法启动呼叫意图,错误日志显示非法状态异常 - 未找到 activity 来处理该意图。这是否意味着没有找到嵌套片段 C 的 activity?这怎么可能发生(没有 activity 的片段创建)?此外,所有片段都是在 运行 时间内动态创建的。 我尝试使用 getfragmentmanager() 和 getchildfragmentmanager() 方法。 在这两种情况下我都面临这个错误。任何建议将不胜感激。
这是我的代码片段
将片段 A 附加到 activity
FragmentManager fm = getFragmentManager();
FragmentTransaction ft = fm.beginTransaction();
ft.add(R.id.container,FragmentA_.builder().build());
ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE);
ft.addToBackStack(null);
ft.commit();
用片段 B 替换片段 A
FragmentManager fm = getFragmentManager();
FragmentTransaction ft = fm.beginTransaction();
ft.replace(R.id.container, FragmentB_.builder().build());
ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE);
ft.addToBackStack(null);
ft.commit();
用片段 C 替换片段 B
FragmentManager fm = getFragmentManager();
FragmentTransaction ft = fm.beginTransaction();
ft.replace(R.id.container, FragmentC_.builder().build());
ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE);
ft.addToBackStack(null);
ft.commit();
呼叫意图
public void call(String contact){
Intent i=new Intent(Intent.ACTION_CALL, Uri.parse("tel:"+contact));
getActivity().startActivity(i);
}
在我的 manifest.xml 中,我添加了通话的所有权限。
编辑 - 2 片段C代码
@EFragment(R.layout.fragment_c)
public class FragmentC extends Fragment
{
@Click(R.id.call_button)
void call(){
call(phone_number);
}
public void call(String contact){
Intent i=new Intent(Intent.ACTION_CALL, Uri.parse("tel:"+contact));
getActivity().startActivity(i);
}
}
去掉getActivity()直接调用startActivity(i)
片段有自己的 startActivity() 方法。在这种情况下,您不需要传递 activity 上下文或引用。更多信息:Click here