解决Fragment重影问题

优化Add添加Fragment,在使用hide、show中解决重影问题

初始化中

private FragmentManager fragmentManager;
private List<BaseFragment> fragmentList = new ArrayList<BaseFragment>();
//用于记录当前显示的Fragment
private int currentIndex = 0;
protected void initData() {
	fragmentManager = getSupportFragmentManager();
	//初始化三个Fragment
	//不走任何生命周期方法
	conversationFragment = new ConversationFragment();
	contactFragment = new ContactFragment();
	pluginFragment = new PluginFragment();

	fragmentList.add(conversationFragment);
	fragmentList.add(contactFragment);
	fragmentList.add(pluginFragment);

	Fragment fragment0 = fragmentManager.findFragmentByTag("0");
	if (fragment0 != null) {
		fragmentManager.beginTransaction().remove(fragment0).commit();
	}
	Fragment fragment1 = fragmentManager.findFragmentByTag("1");
	if (fragment1 != null) {
		fragmentManager.beginTransaction().remove(fragment1).commit();
	}
	Fragment fragment2 = fragmentManager.findFragmentByTag("2");
	if (fragment2 != null) {
		fragmentManager.beginTransaction().remove(fragment2).commit();
	}

	//默认让消息Fragment选中
	fragmentManager.beginTransaction().add(R.id.fl_content, conversationFragment, "0").commit();
	currentIndex = 0;
}
点击切换Button时

@Override
public void onClick(View v) {
	int index = 0;
	switch (v.getId()) {
		case R.id.iv_conversation:
			index = 0;
			break;
		case R.id.iv_contact:
			index = 1;
			break;
		case R.id.iv_plugin:
			index = 2;
			break;
	}
	if (index == currentIndex) {
		return;
	}
	BaseFragment baseFragment = fragmentList.get(index);
	FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
	//先判断该Fragment是否已经添加到Activity了,如果没有则添加,如果有,则显示
	if (baseFragment.isAdded()) {
		//则显示
		fragmentTransaction.show(baseFragment);
	} else {
		//添加
		fragmentTransaction.add(R.id.fl_content, baseFragment, index + "");
	}
	//隐藏之前显示的Fragment
	fragmentTransaction.hide(fragmentList.get(currentIndex));
	//提交事务
	fragmentTransaction.commit();
	currentIndex = index;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值