您的位置:首页 > 移动开发 > Android开发

Android实用方法— ViewPager + Fragment取消预加载以及Activity传值给Fragment

2016-11-24 12:42 393 查看
版权声明:本文为博主原创文章,未经博主允许不得转载。

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 {

@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();
}
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
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


   
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: