按下按钮更换片段

时间:2015-12-02 18:11:42

标签: android android-fragments

我已经非常感谢SO的用户让我这么做了,但是经过6个多小时的开发者页面阅读后,我仍然无法在Android模拟器上使用它。 < / p>

我只是想把一个片段换成另一个片段。单击按钮时发生的情况是初始的碎片动画很快,但保持不变。它仅动画一次,后续按钮按下不会产生后续动画。我不知道是不是因为某些原因,onCreate代码以某种方式再次运行,快速替换了#34;点击frag&#34;或者如果问题出在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();
            }
        }
    }

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

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

1 个答案:

答案 0 :(得分:-1)

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

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

我建议您通过调试或使用日志语句来查看正在发生的事情。您甚至可以在replaceFrag()处打印背书。另外,我不会在XML中设置replaceFrag()