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;
}
在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());//頁面變化時的監聽器
}
fragment 接收值:
Bundle bundle = getArguments();
if (bundle != null) {
SORT = bundle != null ? bundle.getString("sort") : defaultHello;
}
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();
}
繼承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();
}