Android studio 项目运行出错

程序是关于底部导航条的(我用的是Android的底部导航条模板),我在fragment理定义了一个button控件,刚运行时可以点击进去,但是点击底部导航条的切换后,再点击会第一个fragment时,发现button点击不进去了,不能够进行实例化,不懂这个问题怎么解决。

这是报错的截图

img

可以发代码调试

不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 你可以看下这个问题的回答https://ask.csdn.net/questions/247290
  • 这篇博客你也可以参考下:Android | 如何给Fragment里的button添加监听事件
  • 你还可以看下android参考手册中的 android Button 一个用户界面元素,用户可以轻拍或点击来执行一个动作。
  • 除此之外, 这篇博客: Android Fragment详解中的 点击底部Button,加载不同的Fragment 部分也许能够解决你的问题, 你可以仔细阅读以下内容或者直接跳转源博客中阅读:

    2、点击底部Button,加载不同的Fragment

    //如果已加载就用show hide方式切换,如果没加载就直接加载新Fragment
    if (findStackFragment(tabsFragment.get(id).getClass(), getChildFragmentManager(), true) != null)
    {
        // 如果show和hide的Fragment不是同一个
        getChildFragmentManager().beginTransaction().show(tabsFragment.get(id)).hide(tabsFragment.get(lastPosition)).commit();
    }else{
        getChildFragmentManager().beginTransaction().add(tabsFragment.get(id))..hide(tabsFragment.get(lastPosition)).commit();
    }
    

    判断目标Fragment是否已经加载

    // 正常方式: 利用Tag找到该Fragment,但是如果是fragment存在于FragmentPagerAdapter中,这种方式就不准了,需要遍历子childFragment列表
    <T extends SupportFragment> T findStackFragment(Class<T> fragmentClass, FragmentManager fragmentManager, boolean isChild)
    {
        Fragment fragment = null;
        if (isChild)
        {
            // 如果是 查找子Fragment,则有可能是在FragmentPagerAdapter/FragmentStatePagerAdapter中,这种情况下,
            // 它们的Tag是以android:switcher开头,所以这里我们使用下面的方式
            List<Fragment> childFragmentList = fragmentManager.getFragments();
            if (childFragmentList == null)
                return null;
    
            for (int i = childFragmentList.size() - 1; i >= 0; i--)
            {
                Fragment childFragment = childFragmentList.get(i);
                if (childFragment instanceof SupportFragment
                    && childFragment.getClass().getName().equals(fragmentClass.getName()))
                {
                    fragment = childFragment;
                    break;
                }
            }
        }
        else
        {
            fragment = fragmentManager.findFragmentByTag(fragmentClass.getName());
        }
        if (fragment == null)
        {
            return null;
        }
        return (T) fragment;
    }
    

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^