Fragment跳转问题
为什么用第一次使用replace转换Fragment的时候会出现空白页,要多点一次才出现需要的Fragment
MainActivity的代码如下:
package com.example.imooc.shopping;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.LinearLayout;
import com.example.imooc.shopping.Fragment.MainFragment;
import com.example.imooc.shopping.Fragment.MeFragment;
import com.example.imooc.shopping.Fragment.ShopFragment;
public class MainActivity extends AppCompatActivity implements View.OnClickListener{
protected MainFragment mainFragment=new MainFragment();
protected MeFragment meFragment=new MeFragment();
protected ShopFragment shopFragment=new ShopFragment();
protected LinearLayout menuMain,menuMe,menuShop;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
this.getSupportFragmentManager().beginTransaction()
.add(R.id.container_content,mainFragment)
.add(R.id.container_content,meFragment).hide(meFragment)
.add(R.id.container_content,shopFragment).hide(shopFragment)
.commit();
intent();
}
private void intent() {
menuMain=this.findViewById(R.id.menu_main);
menuMain.setOnClickListener(this);
menuMe=this.findViewById(R.id.menu_me);
menuMe.setOnClickListener(this);
menuShop=this.findViewById(R.id.menu_shop);
menuShop.setOnClickListener(this);
}
@Override
public void onClick(View v) {
switch (v.getId()){
case R.id.menu_main:
this.getSupportFragmentManager().beginTransaction()
.replace(R.id.container_content,mainFragment).commit();
break;
case R.id.menu_me:
this.getSupportFragmentManager().beginTransaction()
.replace(R.id.container_content,meFragment).commit();
break;
case R.id.menu_shop:
this.getSupportFragmentManager().beginTransaction()
.replace(R.id.container_content,shopFragment).commit();
break;
}
}
}还有我看提问里面有老师说可以用FragmentList来帮助使用show,hide来显示Fragment,需要遍历FragmentList来判断Fragment是否展示或隐藏,那怎么判断它是展示还是隐藏,这些都没接触过啊,具体是需要怎么写?
正在回答
1、replace()操作时是先移除所有同内容id的fragment,再添加传入fragment对象。所以导致其他fragment是空的,你可以使用加载时一次性把所有fragment都add进去,之后再点击就使用show()或者hide()即可。
2、如果你是想判断fragment的隐藏状态,当Fragment配合ViewPager使用时,可以使用setUserVisibleHint()来判断。当Fragment配合FragmentTransition使用时,可以使用onHiddenChanged()来判断。你也可以把提问的部分截图贴出来方便老师结合具体环境来为你解答。
我再将问题描叙清楚一点,当登录进去后可以显示主界面,如下图

然后点击购物,这是第一次跳转,就会出现空白页,如下图

这个时候无论如何点击购物,都不会出现对应的Fragment,只有点击了用户或者首页才会出现,相应的如果第一次点击用户,也会出现空白的Fragment,下图是第二次跳转后的用户页面

然后再点回购物,对应的Fragment又会重新出现,如下图

真的非常奇怪,查百度都没找到相关的文档或者博客文章,还有个现象就是,当我登录进到主界面的时候,如果第一次点击的是地图Fragment,也就是北京隔壁的按钮,对应的地图Fragment又会正常弹出,再点击购物或者用户的时候,对应的Fragment也可以正常弹出,太奇怪了,左右就差这个问题就可以提交了,麻烦老师了
- 参与学习 人
- 提交作业 5461 份
- 解答问题 7235 个
此次推出的专题为Android攻城狮培养计划的第一部分语法与界面基础篇,将带大家从0开始学习Android开发。
了解课程
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星