一个Activity嵌套多个Fragment

一个Activity嵌套多个Fragment

一个主activity嵌套多个fragment满足市面上大多数app的整体框架,底部导航栏支持纯照片、照片加文字的组合方式满足了大部分app底部导航栏的要求;值传递支持activity与fragment、fragment与fragment;解决了fragment重叠的问题;展示了bannner加内容嵌套;fragment嵌套fragment等

      欢迎

Star

Fork

FragmentFrame项目地址

1.底部导航栏

(1).BottomBar底部导航栏

(2).BottomBarTab底部导航栏中的item,支持照片/照片加文字的格式

2.Fragment重叠的问题

1
2
3
4
5
6
7
8
9
10
11
12
@Override
public void onAttachFragment(Fragment fragment) {
if (homeFragment == null && fragment instanceof HomeFragment)
homeFragment = (HomeFragment) fragment;
if (secondFragment == null && fragment instanceof SecondFragment)
secondFragment = (SecondFragment) fragment;
if (thirdFragment == null && fragment instanceof ThirdFragment)
thirdFragment = (ThirdFragment) fragment;
if (personFragment == null && fragment instanceof PersonFragment)
personFragment = (PersonFragment) fragment;
// super.onAttachFragment(fragment);
}

3.经典的banner展示加内容展示嵌套

图1

(1).实现思路

listview+viewpager打造主流的这种首页

(2).具体实现HomeFragment

4.Fragment嵌套Fragment实现左右滑动切换及其点击导航栏切换显示

图1

(1).实现思路

viewpager+加上头部导航栏实现切换

(2).具体实现HomeFragment

5.MainActivity中的ThirdFragment点击进入FActivity,点击FActivity的操作返还到MainActivity,并将原先展示的ThirdFragment替换成HomeFragment(也可以携带数据返还)

(1).通过接口的方式来到达效果

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
public interface BaseFragmentCallback {
/**
* 当点击Fragment上组件时调用
*
* @param tag
* 当前事件所发生在的Fragment标签(用做区分各Fragment的标识),默认为当前Fragment类名
* @param eventID
* 当前事件的编号
* @param data
* 需携带的数据,没有数据传入null
*
* @see 在各子类Fragment中可用{@link BaseFragment#callbackToActivity(View, Object)}
* 来触发事件
*/
void onCallback(String tag, int eventID, Object data);
}
```
然后在MainActivity实现这个接口,通过回调拿到数据并在MainActivity切换显示的Fragment()
所有的Fragment都是继承BaseFragment,BaseFragment通过接口绑定来回调数据
### (2).具体实现
MainActivity
``` javascript
public class MainActivity extends AppCompatActivity implements BaseFragmentCallback
/**
* 接口回调实现FragmentFragment之间的切换
*/
@Override
public void onCallback(String tag, int eventID, Object data) {
if (tag.equals(HomeFragment.class.getSimpleName())
|| tag.equals(SecondFragment.class.getSimpleName())
|| tag.equals(ThirdFragment.class.getSimpleName())
|| tag.equals(PersonFragment.class.getSimpleName())
) {
switch (eventID) {
case R.id.tag_layout_f://返回到主界面
//设置被选中状态
mBottomBar.setCurrentItem(0);
if (currentFragment != homeFragment) {
if (homeFragment == null) {
homeFragment = HomeFragment.getInstance();
}
SmartShow(homeFragment);
currentFragment = homeFragment;
} else {
// TODO: 2017/6/28 add refresh
}
break;
}
}
}

ThirdFragment

1
2
3
4
5
6
7
8
9
10
11
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
// 消息
if (requestCode == NOTICE) {
if (resultCode == NOTICE_RESULT) {
//返回到主界面
callbackAttachActivityWhenFragmentItemClick(R.id.tag_layout_f, null);
}
}
}

BaseFragment

1
2
3
4
5
6
7
@Override
public void onAttach(Activity activity) {
super.onAttach(activity);
if (activity instanceof BaseFragmentCallback) {
callback = (BaseFragmentCallback) activity;
}
}

具体 Clone or download看一下

6.Activity向Fragment返还数据

(1).Activity主要通过setResult将数据返还,PersonFragment在onActivityResult去接受数据

(2).具体实现PersonFragment

坚持原创技术分享,您的支持将鼓励我继续创作!
Fork me on GitHub