同一Activity,通過Fragment內(nèi)控件跳轉(zhuǎn)到另一個(gè)Fragment
效果
效果圖看起來好像很簡單,只是一個(gè)界面的跳轉(zhuǎn)而已.我們知道再Activity
中跳轉(zhuǎn)別的別的Fragment
通過下方的BottomNavigationBar
導(dǎo)航控件就可以跳轉(zhuǎn)別的Fragment.
有人說跳轉(zhuǎn)很簡單用這段代碼就可以
android.support.v4.app.FragmentManager fm = getSupportFragmentManager();
android.support.v4.app.FragmentTransaction transaction = fm.beginTransaction();
if (mHomeFragment == null) {
mHomeFragment = new HomeFragment();
}
transaction.replace(R.id.fragment_container, mHomeFragment);
// 事務(wù)提交
transaction.commit();
ok, 你會(huì)發(fā)現(xiàn)Frangment
替換成功了,但是你又發(fā)現(xiàn)一個(gè)問題,Fragment
替換了可是下面的導(dǎo)航控件沒有變到資訊,再次點(diǎn)擊首頁也回不去首頁了
image
經(jīng)過痛苦的2個(gè)小時(shí)折騰,找到一個(gè)比較方便的方式.這是最終效果
效果
一.創(chuàng)建接口
/**
* 創(chuàng)建者: billy
* 創(chuàng)建時(shí)間: 2018/10/24 14:57
* 描述: 改變fragment
*/
public interface ChangeFragment {
void changge(int postion);
}
二.創(chuàng)建全局變量
為了方便Fragment管理,我全部做成了全局變量
/**
* 創(chuàng)建者: billy
* 創(chuàng)建時(shí)間: 2018/10/24 14:16
* 描述: 全局變量
*/
public class GlobalParms {
private static HomeFragment sHomeFragment; //主頁fragemnt
private static ChartsFragment sChartsFragment; //走勢圖fragemnt
private static ZiXunFragment sZiXunFragment; //資訊fragemnt
private static OtherFragment sOtherFragment; //其它fragemnt
public static ChangeFragment sChangeFragment; //改變選中Frangment的接口
/**
* 獲取主頁Fragment
*
* @return
*/
public static HomeFragment getHomeFragment() {
if (sHomeFragment == null) {
sHomeFragment = new HomeFragment();
}
return sHomeFragment;
}
/**
* 走勢圖fragemnt
*
* @return
*/
public static ChartsFragment getChartsFragment() {
if (sChartsFragment == null) {
sChartsFragment = new ChartsFragment();
}
return sChartsFragment;
}
/**
* 資訊fragemnt
*
* @return
*/
public static ZiXunFragment getZiXunFragment() {
if (sZiXunFragment == null) {
sZiXunFragment = new ZiXunFragment();
}
return sZiXunFragment;
}
/**
* //其它fragemnt
*
* @return
*/
public static OtherFragment getOtherFragment() {
if (sOtherFragment == null) {
sOtherFragment = new OtherFragment();
}
return sOtherFragment;
}
/**
* 設(shè)置被選中的Fragment
* @param changeFragment
*/
public static void setFragmentSelected(ChangeFragment changeFragment) {
sChangeFragment = changeFragment;
}
}
三.在Acitiy中創(chuàng)建接口
private void initData() {
GlobalParms.setFragmentSelected(new ChangeFragment() {
@Override
public void changge(int postion) {
//調(diào)用BottomNavigationBar的setlecTab方法來改變Tab
mBottomNavigationBar.selectTab(postion);
}
});
}
四.在Fragment中調(diào)用接口
GlobalParms.sChangeFragment.changge(1);