我已经感谢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()
。