【问题标题】:Get clicks from activity button in multiple fragments从多个片段中的活动按钮获取点击次数
【发布时间】:2018-12-30 06:05:02
【问题描述】:

我有两个片段。在每个片段中都有一些执行不同功能的方法。我想从主机 Activity 获得 toolbar button 的 click 事件。我已经研究了答案,找到了一些解决方案,例如

button = getActivity().findViewById(R.id.toolbarButton)
btn.setOnClickListener(this);

但是当我使用这种方式时,它只返回第二个片段方法。

【问题讨论】:

  • 你想在 Fragment 中点击活动工具栏吗?
  • @sukhbir 我可以得到这个视图。还有工具栏中的按钮。但我无法在片段中处理它们。当我使用这个按钮的点击监听器时,我只收到第二个片段的点击事件。
  • 您只需要在活动中覆盖工具栏按钮的点击,在点击时您需要检查此Fragment fragment = getSupportFragmentManager().findFragmentById(R.id.fragment_container); if (getSupportFragmentManager().getBackStackEntryCount() > 0) { if (fragment instanceof Yourfragment) { }
  • @sukhbir 请解释你的答案。
  • 请稍等,我将在评论中解释。

标签: android button callback fragment listener


【解决方案1】:

您只需要在activtiy 中覆盖toolbar buttons 中的click,在onClick() 中您需要检查这一点

HostActivity

  Button button = (Button) findViewById(R.id.toolbarButton);
    button.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {

            Fragment fragment = getSupportFragmentManager().findFragmentById(R.id.fragment_container);

            if (fragment instanceof FragmentA) {
                FragmentA objFragmentA = (FragmentA) fragment;
                objFragmentA.callMethod();
            } else if (fragment instanceof FragmentB) {
                FragmentB objFragmentB = (FragmentB) fragment;
                objFragmentB.callMethod();
            }


        }
    });

如果您想使用viewPager 获取当前Fragment 的参考。您可以使用以下代码实现此目的

 if (viewPager.getCurrentItem() == 0) {
        FragmentA frag1 = (FragmentA) viewPager
                .getAdapter()
                .instantiateItem(viewPager, viewPager.getCurrentItem());
        frag1.call();
    } else if (viewPager.getCurrentItem() == 1) {
        FragmentB frag2 = (FragmentB) viewPager
                .getAdapter()
                .instantiateItem(viewPager, viewPager.getCurrentItem());
        frag2.call();
    }

希望这会有所帮助

【讨论】:

  • 我没有使用替换方法。我正在使用 FragmentPagerAdapter。
【解决方案2】:

在Activity中使用fragmentManager获取fragments实例并将其转换为你的fragment,然后你可以调用每个fragment的任何方法。所以你可以在工具栏点击监听器中使用它 在新活动中添加此示例;

FirstFragmet frag1 = (FirstFragment) fragmentManager.findFragmentById(R.id.frag1);
SecondFragmet frag2 = (SecondFragmet) fragmentManager.findFragmentById(R.id.frag2);
findViewById(R.id.someBtn).setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
             frag1.someMethod; //or
             frag2.someMethod;
        }
    });

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-06-28
    • 2017-07-13
    • 2018-08-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-25
    • 1970-01-01
    相关资源
    最近更新 更多