/**
* 绑定fragment与Activity用于主页的导航显示
*
* @param fragmet_id FrameLayout的id
* @param button_id 可以控制fragmen切换的button的id
* @param baseFragmet 所有需要进行切换的fragment的实例数组
* @param showFeragNum 初始化显示第几个fragment的下标
* @param onClickListenerFrame 按钮的点击事件
* @param isReplace 是否使用替换fragment
*/public void bindFragment(@IdRes final int fragmet_id, @IdRes int[] button_id, final BaseFragmet[] baseFragmet, int showFeragNum, final OnClickListenerFrame onClickListenerFrame, final boolean isReplace) {
List<View> list = new ArrayList<>();
supportFragmentManager = getSupportFragmentManager();
if (!isReplace) {
for (int i = 0; i < button_id.length; i++) {
FragmentTransaction transaction = supportFragmentManager.beginTransaction();
transaction.add(fragmet_id, baseFragmet[i]);
transaction.commit();
}
FragmentTransaction transaction = supportFragmentManager.beginTransaction();
transaction.show(baseFragmet[showFeragNum]);
hitefrag(transaction, baseFragmet, showFeragNum);
transaction.commit();
} else {
FragmentTransaction transaction = supportFragmentManager.beginTransaction();
transaction.replace(fragmet_id, baseFragmet[showFeragNum]);
transaction.commit();
}
for (int i = 0; i < button_id.length; i++) {
final Integer index = new Integer(i);
View view = findViewById(button_id[i]);
list.add(view);
view.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
FragmentTransaction transaction = supportFragmentManager.beginTransaction();
if (!isReplace) {
transaction.show(baseFragmet[index]);
hitefrag(transaction, baseFragmet, index);
} else {
transaction.replace(fragmet_id, baseFragmet[index]);
}
transaction.commit();
baseFragmentList.onClick(onClickListenerFrame, index);
}
});
}
baseFragmentList.setViews(list);
}private void hitefrag(FragmentTransaction transaction, BaseFragmet[] baseFragmet, int index) {
for (int j = 0; j < baseFragmet.length; j++) {
if (j == index)
continue;
transaction.hide(baseFragmet[j]);
}
}
代码封装思想就是通过for循环添加fragment,并根据面向对象原理,使用匿名对象的方法进行点击事件的监听,分享不易,大神勿喷