我有关于关闭片段的问题。
我无法通过以下链接在自定义片段本身内关闭片段的原因
getActivity().getFragmentManager().beginTransaction().remove(this);
似乎是继承,因为我的自定义Fragment继承自..
extends android.support.v4.app.Fragment
Android Studio正在抱怨remove(),"这个"
中的参数FragmentTransaction中的remove(android.app.Fragment)无法应用于se.fragmenttest.app.myfrafmentest180406.MyFragment)
奇怪的是,同样的调用似乎可以在MainActivity中实现Fragment的实例化。
全班
public class MyFragment extends android.support.v4.app.Fragment {
private View fragmentView;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup containter, Bundle savedInstanceState) {
fragmentView = inflater.inflate(R.layout.fragment_layout, containter, false);
Button button = (Button) fragmentView.findViewById(R.id.okbutton_id);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
closeFragment();
}
}
);
return fragmentView;
}
private void closeFragment() {
getActivity().getFragmentManager().beginTransaction().remove(this);
}
}
修改
MainActivity的代码protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
MyFragment myFragment = new MyFragment();
FragmentManager fragmentManager = getSupportFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
fragmentTransaction.add(R.id.container, myFragment, "myfragment");
fragmentTransaction.commit();
fragmentTransaction.remove(myFragment);
}
我尝试删除MainActiviy中的片段,然后就可以了。还有更多 - 我可以将引用放在remove()中,而我不能在Fragment类中使用
答案 0 :(得分:0)
使用此
getActivity().getFragmentManager().popBackStack();
(或)使用可以指定标签
示例参考
您可以按名称弹出片段。在向后堆栈添加片段时,只需给它们命名即可。
fragmentTransaction.addToBackStack("fragB");
fragmentTransaction.addToBackStack("fragC");
然后在Fragment_C中,使用名称... fragB
弹出后台堆栈并包含POP_BACK_STACK_INCLUSIVE
someButtonInC.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
FragmentManager fm = getActivity()
.getSupportFragmentManager();
fm.popBackStack ("fragB", FragmentManager.POP_BACK_STACK_INCLUSIVE);
}
});
答案 1 :(得分:0)
我现在不在我的主电脑上,所以无法检查......
但我认为您需要致电getSupportFragmentManager()
而不是getFragmentManager()
。
修改强>
现在我回到我的电脑,我可以确认这是我上面所说的。您发布活动代码也很有帮助。
在您的MainActivity中,您可以致电:
MyFragment myFragment = new MyFragment();
FragmentManager fragmentManager = getSupportFragmentManager();
即。你打电话给getSupportFragmentManager()
这是正确的,以及为什么会有效。
..但在您的片段中,您可以调用标准getFragmentManager()
,如下所示:
getActivity().getFragmentManager().beginTransaction().remove(this);
当片段扩展支持片段时,当您尝试拨打this
时,无法找到它。但是,如果您将以上行更改为:
getActivity().getSupportFragmentManager().beginTransaction().remove(this);
this
将不再被发现,您的代码应该运行。