按下按钮替换碎片



我已经感谢SO的一位用户让我走到了这一步,但经过6个多小时的开发者页面阅读,我仍然无法在Android模拟器上使用它

我只是想把一个片段换成另一个片段。单击该按钮时会发生的情况是,初始碎片会快速生成动画,但会保持不变。它只设置一次动画,随后按下按钮不会生成后续动画。我不知道这是因为出于某种原因,onCreate代码以某种方式再次快速运行,将初始frag替换为"click frag",还是问题出在replaceFrag方法本身,或者某个东西执行不正确如果有人看到这个问题并能指出它在哪里(没有完整详细的解释),我将不胜感激。当我开始工作时,我会给那个人绿色支票,并发布解决方案

这是Main_Activity:

public class MainActivity extends FragmentActivity {
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            if (findViewById(R.id.fragment_container) != null) {
                if (savedInstanceState != null) {
                    return;
                }
            }
            // Add the fragment to'fragment_container' 
            FragmentManager fm = getSupportFragmentManager();
            FragmentTransaction ft = fm.beginTransaction();
            Menu_Fragment fragment = new Menu_Fragment();
            fragment.setArguments(getIntent().getExtras());
            ft.add(R.id.fragment_container, fragment, "INITIAL_FRAG");
            ft.commit();
        }
        public void replaceFrag(View v) {
            Fragment fragment = new Click_Fragment();   //Creates a new Click_Fragment when button selected
            Fragment savedFragment = null;             // creates an instance of savedFragment
            if (fragment != null) { //check to see if fragment was instantiated, always true
                savedFragment = getSupportFragmentManager().findFragmentByTag("FB");
                FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
                if (savedFragment != null) {//searches to see if the Click_Fragment has already been created once
                    ft.replace(R.id.fragment_container, savedFragment, "FB");
                } else {
                    ft.replace(R.id.fragment_container, fragment, "FB");
                }
                ft.addToBackStack(null);
                ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN);
                ft.commit();
            }
        }
    }

该按钮的XML位于menu_fragment布局中,具有以下属性:android:onClick="replaceFrag"

编辑:按下按钮时,SDK日志中会出现此错误:mycompany.fragment_test W/OpenGLRenderer: Failed to set EGL_SWAP_BEHAVIOR on surface 0xab70a680, error=EGL_SUCCESS

你能解释一下为什么replaceFrag():中有这两行吗

   ft.addToBackStack(null);
   ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN);

我建议通过调试或使用日志语句来了解发生了什么。您甚至可以打印replaceFrag()的背面。此外,我不会在XML中设置replaceFrag()

最新更新