Android 在FragmentTagManger中获取后退按钮事件的当前片段
我使用FragmentTagManager,现在我想访问当前活动的片段,并在按下后退按钮时调用一个方法 我想得到的片段是一个容器。因为我在选项卡中动态地更改片段,所以我需要访问容器并从其超类调用方法,而不能直接从FragmentStack中弹出() 如何访问选项卡中显示的当前片段 现在我有这个 主类 Basecontainer.xmlAndroid 在FragmentTagManger中获取后退按钮事件的当前片段,android,android-fragments,Android,Android Fragments,我使用FragmentTagManager,现在我想访问当前活动的片段,并在按下后退按钮时调用一个方法 我想得到的片段是一个容器。因为我在选项卡中动态地更改片段,所以我需要访问容器并从其超类调用方法,而不能直接从FragmentStack中弹出() 如何访问选项卡中显示的当前片段 现在我有这个 主类 Basecontainer.xml 我希望你能同时找到一个解决方案,因为你的问题在3个月前发布了。尽管如此,我还是面临着同样的问题,并提出了这个解决方案 如果要覆盖,则可以使用OnBackbackC
我希望你能同时找到一个解决方案,因为你的问题在3个月前发布了。尽管如此,我还是面临着同样的问题,并提出了这个解决方案
如果要覆盖,则可以使用OnBackbackChangedListener了解片段堆栈何时发生更改,而不考虑设置/取消设置片段堆栈的方法,如图所示:
getSupportFragmentManager().addOnBackStackChangedListener(new FragmentManager.OnBackStackChangedListener() {
@Override
public void onBackStackChanged() {
//TODO: Handle your stacks changes here
Log.d(Constants.TAG,"Stack Entry Count: "+getSupportFragmentManager().getBackStackEntryCount());
}
});
问候-
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/container"
android:layout_width="match_parent"
android:layout_height="match_parent">
</FrameLayout>
public class MusicListContainerFragment extends BaseContainerFragment {
private boolean mIsViewInited;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
return inflater.inflate(R.layout.base_container, null);
}
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
if (!mIsViewInited) {
mIsViewInited = true;
initView();
}
}
private void initView() {
replaceFragment(new MusicListFragment(), false);
}
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case android.R.id.home:
// this takes the user 'back', as if they pressed the left-facing triangle icon on the main android toolbar.
// if this doesn't work as desired, another possibility is to call `finish()` here.
if (getFragmentManager().findFragmentById(R.id.activity_profile) instanceof FragmentOfYourChoice) {
onBackPressed();
return true;
}
else
super.onOptionsItemSelected(item);
default:
return super.onOptionsItemSelected(item);
}
}
@Override
public void onBackPressed() {
if (getFragmentManager().getBackStackEntryCount() > 1)
getFragmentManager().popBackStack();
else
super.onBackPressed();
}
getSupportFragmentManager().addOnBackStackChangedListener(new FragmentManager.OnBackStackChangedListener() {
@Override
public void onBackStackChanged() {
//TODO: Handle your stacks changes here
Log.d(Constants.TAG,"Stack Entry Count: "+getSupportFragmentManager().getBackStackEntryCount());
}
});