ViewPager + Fragment取消預加載以及Activity傳值給Fragment

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();
}
發佈了61 篇原創文章 · 獲贊 72 · 訪問量 16萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章