Android实用方法— ViewPager + Fragment取消预加载以及Activity传值给Fragment
2016-11-24 12:42
393 查看
版权声明:本文为博主原创文章,未经博主允许不得转载。
1、Activity传值给Fragment:
在fragment中写以下方法:
2
3
4
5
6
7
1
2
3
4
5
6
7
在activity中:
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
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
fragment 接收值:
2
3
4
1
2
3
4
2、viewpager+fragment取消预加载:
写一个BaseFragment:
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
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
继承BaseFragment、Fragment中 的代码:
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
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
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
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
1、Activity传值给Fragment:
在fragment中写以下方法:
public static Article_Fg newInstance(String str) { Article_Fg fragment = new Article_Fg(); Bundle b = new Bundle(); b.putString("sort", str); fragment.setArguments(b); return fragment; }1
2
3
4
5
6
7
1
2
3
4
5
6
7
在activity中:
/* * 初始化ViewPager */ public void InitViewPager() { fragmentList = new ArrayList<>(); Article_Fg fg1 = Article_Fg.newInstance("aa"); Article_Fg fg2 = Article_Fg.newInstance("1"); Article_Fg fg3 = Article_Fg.newInstance("2"); Article_Fg fg4 = Article_Fg.newInstance("3"); Article_Fg fg5 = Article_Fg.newInstance("4"); Article_Fg fg6 = Article_Fg.newInstance("5"); fragmentList.add(fg1); fragmentList.add(fg2); fragmentList.add(fg3); fragmentList.add(fg4); fragmentList.add(fg5); fragmentList.add(fg6); //给ViewPager设置适配器 vpArticle.setAdapter(new ArticleActivityAdapter(getSupportFragmentManager(), fragmentList)); vpArticle.setOffscreenPageLimit(1); vpArticle.setCurrentItem(0);//设置当前显示标签页为第一页 vpArticle.setOnPageChangeListener(new MyOnPageChangeListener());//页面变化时的监听器 }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
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
fragment 接收值:
Bundle bundle = getArguments(); if (bundle != null) { SORT = bundle != null ? bundle.getString("sort") : defaultHello; }1
2
3
4
1
2
3
4
2、viewpager+fragment取消预加载:
写一个BaseFragment:
public abstract class BaseFragment extends Fragment { /** Fragment当前状态是否可见 */ protected boolean isVisible; @Override public void setUserVisibleHint(boolean isVisibleToUser) { super.setUserVisibleHint(isVisibleToUser); if(getUserVisibleHint()) { isVisible = true; onVisible(); } else { isVisible = false; onInvisible(); } } /** * 可见 */ protected void onVisible() { lazyLoad(); } /** * 不可见 */ protected void onInvisible() { } /** * 延迟加载 * 子类必须重写此方法 */ protected abstract void lazyLoad(); }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
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
继承BaseFragment、Fragment中 的代码:
public class Article_Fg extends BaseFragment implements Articlelist.LoadListener {1
@Bind(R.id.list_fragment_article)
Articlelist listFragmentArticle;
@Bind(R.id.sf_fragment_article)
SwipeRefreshLayout sfFragmentArticle;
private View view , header;
private boolean results = false;
private int ARTICLE_PAGER = 1 ,FIRST_IN = 1;
private String SORT = "aa";
private ArticleAdapter.VolleyOperateAdapter mAdapter;
private RequestQueue queue;
private List<ArticleListBean> list = new ArrayList<>();
private String defaultHello = "default value";
/** 标志位,标志已经初始化完成 */
private boolean isPrepared;
/** 是否已被加载过一次,第二次就不再去请求数据了 */
private boolean mHasLoadedOnce;
public static Article_Fg newInstance(String str) { Article_Fg fragment = new Article_Fg(); Bundle b = new Bundle(); b.putString("sort", str); fragment.setArguments(b); return fragment; }
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
if(view == null) {
view = inflater.inflate(R.layout.fragment_article, container, false);
//获得索引值
Bundle bundle = getArguments(); if (bundle != null) { SORT = bundle != null ? bundle.getString("sort") : defaultHello; }
isPrepared = true;
lazyLoad();
}
//因为共用一个Fragment视图,所以当前这个视图已被加载到Activity中,必须先清除后再加入Activity
ViewGroup parent = (ViewGroup)view.getParent();
if(parent != null) {
parent.removeView(view);
}
ButterKnife.bind(this, view);
queue = Volley.newRequestQueue(getContext());
return view;
}
@Override
protected void lazyLoad() {
if (!isPrepared || !isVisible || mHasLoadedOnce) {
return;
}
new AsyncTask<Void, Void, Boolean>() {
@Override
protected void onPreExecute() {
super.onPreExecute();
//显示加载进度对话框
DialogUtil.showpdialog(getContext());
}
@Override
protected Boolean doInBackground(Void... params) {
try {
Thread.sleep(1000);
} catch (Exception e) {
e.printStackTrace();
}
return true;
}
@Override
protected void onPostExecute(Boolean isSuccess) {
if (isSuccess) {
//在这里添加操作代码
mHasLoadedOnce = true;
initview();
isnettest();
init();
} else {
// 加载失败
}
//关闭对话框
DialogUtil.closedialog();
}
}.execute();
}
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
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
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
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
相关文章推荐
- Android实用方法— ViewPager + Fragment取消预加载以及Activity传值给Fragment
- android Viewpager取消预加载及Fragment方法的学习
- Android Viewpager+Fragment取消预加载及Fragment方法的学习
- Android中ViewPager+Fragment取消(禁止)预加载延迟加载(懒加载)问题解决方案
- ViewPager切换防止Fragment销毁以及取消Fragment的预加载
- Android开发ViewPager的预加载和Fragment的销毁问题,以及tabLayout+ViewPager的使用,tablayout平板适配问题解决
- android 中Activity 加载Fragment ;Fragment中加载ViewPager
- Android中ViewPager+Fragment预加载和onResume方法的问题
- ViewPager+Fragment取消预加载以及禁止滑动
- ViewPager防止Fragment销毁以及取消Fragment的预加载
- Android Fragment下ViewPager取消预加载
- Android中ViewPager+Fragment取消(禁止)预加载延迟加载(懒加载)问题解决方案
- ViewPager防止Fragment销毁以及取消Fragment的预加载
- ViewPager+Fragment取消预加载、禁止滑动以及更新
- ViewPager防止Fragment销毁以及取消Fragment的预加载
- Android ViewPager与Fragment的延时切换,取消预加载优化
- ViewPager防止Fragment销毁以及取消Fragment的预加载
- 【Fragment使用】(二)Android之取消ViewPage+Fragment的预加载
- Android 防止ViewPager中的Fragment被销毁的方法,更加流畅
- ViewPager+Fragment取消预加载(延迟加载)