Android FragmentTransaction在不同版本下的奇怪问题
2015-05-17 22:57
302 查看
目前在做的一款APP,用到了一个布局块中的Fragment的切换,其中一个按钮按下后的事件如下:
btnTranslate.setOnClickListener(new View.OnClickListener()
{
@Override
public void onClick(View v)
{
/*当前界面不是翻译界面时才进行下列动作*/
if( MAIN_FRAGMENT_ID != currentFragmentId )
{
setChoosedBtnState(MAIN_FRAGMENT_ID);
FragmentManager fragmentManager = getFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
if( null == fragmentTranslate )
fragmentTranslate = new MainUI();
hideCurrentFragment(fragmentTransaction); fragmentTransaction.show(fragmentTranslate);
<pre name="code" class="java"> fragmentTransaction.add(R.id.fragment_content, fragmentTranslate, "MainUI"); fragmentTransaction.commit();currentFragmentId = MAIN_FRAGMENT_ID;}}});
搞了好久,最后看到<pre name="code" class="java">fragmentTransaction.add(R.id.fragment_content, fragmentTranslate, "MainUI");
这句话,它作用就是把产生的Fragment实例加入到指定的布局块中,再联想我的问题,也就是在加入一次然后再次加入出现了问题,所以试着只在第一次创建Fragment实例时调用这条语句,果然问题解决!
修改后的代码如下:
btnTranslate.setOnClickListener(new View.OnClickListener()
{
@Override
public void onClick(View v)
{
/*当前界面不是翻译界面时才进行下列动作*/
if( MAIN_FRAGMENT_ID != currentFragmentId )
{
setChoosedBtnState(MAIN_FRAGMENT_ID);
FragmentManager fragmentManager = getFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
if( null == fragmentTranslate )
{
fragmentTranslate = new MainUI();
fragmentTransaction.add(R.id.fragment_content, fragmentTranslate, "MainUI");
}
hideCurrentFragment(fragmentTransaction); fragmentTransaction.show(fragmentTranslate);
fragmentTransaction.commit();
currentFragmentId = MAIN_FRAGMENT_ID;
}
}
});
btnTranslate.setOnClickListener(new View.OnClickListener()
{
@Override
public void onClick(View v)
{
/*当前界面不是翻译界面时才进行下列动作*/
if( MAIN_FRAGMENT_ID != currentFragmentId )
{
setChoosedBtnState(MAIN_FRAGMENT_ID);
FragmentManager fragmentManager = getFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
if( null == fragmentTranslate )
fragmentTranslate = new MainUI();
hideCurrentFragment(fragmentTransaction); fragmentTransaction.show(fragmentTranslate);
<pre name="code" class="java"> fragmentTransaction.add(R.id.fragment_content, fragmentTranslate, "MainUI"); fragmentTransaction.commit();currentFragmentId = MAIN_FRAGMENT_ID;}}});
hideCurrentFragment(fragmentTransaction); fragmentTransaction.show(fragmentTranslate);这两句本来是为了提高切换速度,并且保存用户产生的数据而选用隐藏/显示来代替replace(remove/add),运行时在Android 4.0的模拟器和我Android 4.1的手机上没有任何问题,效果也很好,但是当我把程序放在我的Android 4.4(Galaxy S5··貌似这个机型问题挺多···)时出现闪退!具体情形是,当我点击一个按钮创建了一个Fragment的实例时程序正常运行,但是当我再次点击已经创建过实例的界面按钮时就会闪退,一直不明白是怎么回事,查了API也没找到相关的说明。
搞了好久,最后看到<pre name="code" class="java">fragmentTransaction.add(R.id.fragment_content, fragmentTranslate, "MainUI");
这句话,它作用就是把产生的Fragment实例加入到指定的布局块中,再联想我的问题,也就是在加入一次然后再次加入出现了问题,所以试着只在第一次创建Fragment实例时调用这条语句,果然问题解决!
修改后的代码如下:
btnTranslate.setOnClickListener(new View.OnClickListener()
{
@Override
public void onClick(View v)
{
/*当前界面不是翻译界面时才进行下列动作*/
if( MAIN_FRAGMENT_ID != currentFragmentId )
{
setChoosedBtnState(MAIN_FRAGMENT_ID);
FragmentManager fragmentManager = getFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
if( null == fragmentTranslate )
{
fragmentTranslate = new MainUI();
fragmentTransaction.add(R.id.fragment_content, fragmentTranslate, "MainUI");
}
hideCurrentFragment(fragmentTransaction); fragmentTransaction.show(fragmentTranslate);
fragmentTransaction.commit();
currentFragmentId = MAIN_FRAGMENT_ID;
}
}
});
相关文章推荐
- 解决不同版本的eclipse或sdk所导致的android layout xml无法显示的问题
- Android不同版本上Toast连续显示的问题
- HttpURLConnection 因Android版本不同而导致的Bad Request问题,在2.0+不行,4.0+可以
- Android不同版本上Toast连续显示的问题
- android调用系统相机和相册进行拍照裁剪处理,解决不同安卓版本存在无法加载相册的问题,处理了是否有sd卡的存在的情况
- 笔记:Android判断版本并根据版本使用不同的代码以及旧版本XML问题
- Android——UI篇:关于Fragment的构造参数打包release版本报错的问题
- 关于Android添加fragment后版本不兼容问题
- Android不同系统版本的悬浮窗权限问题
- ubuntu 编译android时,java和javac版本不同引起的问题。
- Android-优化不同版本系统WebView版本兼容性问题
- Android中横竖屏切换加载不同布局导致fragment数据丢失的问题
- Android利用productFlavors 打包不同版本API的调用
- 多个插件依赖不同版本jQuery问题解决案例
- Android 版本兼容问题集锦
- android应用版本升级时签名冲突问题的原因及解决办法
- Android 6.0 以上版本提示“检测到屏幕叠加层”的问题,规避方法
- Android 拍照不同机型的诡异问题
- 关于android版本兼容的一些问题
- Android支持库版本不一致而出现的奇怪bug