java - 如何编写一个以 fragment 类作为参数的方法,该方法将允许我创建该 fragment 的新实例?

标签 java android

目标

我正在尝试编写一种方法来替换我用来交换 fragment 的代码,以便将复制和发布保持在最低限度(并保持 D.R.Y.)

问题

当我尝试使用作为参数传入的类来创建该类的新实例时,出现错误。

错误发生在这行代码中,位于运算符(等号)左侧:

newFragmentClass new_fragment = newFragmentClass.newInstance();     

它给我的错误是:“newFragmentClass 无法解析为类型”。

完整代码
    private void changeFragment(Class<?> newFragmentClass)
    {
        // Detect the current fragment
            Fragment current_fragment = getSupportFragmentManager().findFragmentById(R.id.fragment_container);
    
        // Create a new instance of the given class, edit later to gracefully handle errors
            newFragmentClass new_fragment = newFragmentClass.newInstance(); 
            
        // Switch to the new fragment
            FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
            transaction.detach(current_fragment);
            transaction.replace(R.id.fragment_container, new_fragment);
            transaction.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE);
            transaction.commit();
            
        // Change the tab background to indicate that the tab is active, reset backgrounds for any other tabs
            findViewById(R.id.page_one_tab).setBackgroundResource(R.drawable.menu_button_background_active);
            findViewById(R.id.page_two_tab).setBackgroundResource(R.drawable.menu_button_background);
            findViewById(R.id.page_three_tab).setBackgroundResource(R.drawable.menu_button_background);
    
    }
    
    // Page One Tab Button Functionality
    public void pageOneTab (View v)
    {
        // Change the fragment to SelectPlayersFragment
        changeFragment(Page_One_Fragment.class);
    }
尝试的解决方案

我已经在 StackOverflow 和整个互联网上搜索了一段时间,但未能找到解决方案。几个主题like this one似乎他们会解决问题,但后来我在 transaction.replace 行上遇到了一个错误,我找不到修复程序:“FragmentTransaction 类型中的方法 Replace(int, Fragment) 不适用于参数(整数,对象)”。

最佳答案

也许更简单的解决方案是将 Fragment 作为参数传递,而不是 Class,并使用它来替换当前 fragment 。此外,您不需要分离当前 fragment ,这就是 replace() 为您所做的事情。

类似这样的事情:

public void changeFragment(Fragment fragment) {
    FragmentManager manager = getSupportFragmentManager();
    FragmentTransaction transaction = manager.beginTransaction();
    transaction.replace(R.id.fragment_container, fragment, "tag");
    transaction.commit();
    //.....
}

你可以像这样使用它:

changeFragment(new Page_One_Fragment());

关于java - 如何编写一个以 fragment 类作为参数的方法,该方法将允许我创建该 fragment 的新实例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18505017/

相关文章:

java - 我的主应用程序菜单无法打开

java - Spring JAXB - 使用模式验证解码 XML 文档

android - 单击时 android 组件的掩码

android - 如何在 calabash-android 中将应用程序带到前台?

使用 JobIntentService 在后台更新 Android Oreo 位置

java - Java 版本 (1.3/1.4/1.5/1.6/...) 的受欢迎程度有哪些衡量标准?

java - 结果集不可更新

java - JSch SFTP 文件下载

android - 为什么 Google 使用适用于 Android 的 Google API 从版本 12.0.1 跳到 15.0.0?

Android 后退按钮和进度对话框