Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/222.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 在FragmentTagManger中获取后退按钮事件的当前片段_Android_Android Fragments - Fatal编程技术网

Android 在FragmentTagManger中获取后退按钮事件的当前片段

Android 在FragmentTagManger中获取后退按钮事件的当前片段,android,android-fragments,Android,Android Fragments,我使用FragmentTagManager,现在我想访问当前活动的片段,并在按下后退按钮时调用一个方法 我想得到的片段是一个容器。因为我在选项卡中动态地更改片段,所以我需要访问容器并从其超类调用方法,而不能直接从FragmentStack中弹出() 如何访问选项卡中显示的当前片段 现在我有这个 主类 Basecontainer.xml 我希望你能同时找到一个解决方案,因为你的问题在3个月前发布了。尽管如此,我还是面临着同样的问题,并提出了这个解决方案 如果要覆盖,则可以使用OnBackbackC

我使用FragmentTagManager,现在我想访问当前活动的片段,并在按下后退按钮时调用一个方法

我想得到的片段是一个容器。因为我在选项卡中动态地更改片段,所以我需要访问容器并从其超类调用方法,而不能直接从FragmentStack中弹出()

如何访问选项卡中显示的当前片段

现在我有这个

主类 Basecontainer.xml
我希望你能同时找到一个解决方案,因为你的问题在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());
        }
    });