1. 程式人生 > >EventBus進入Activity頁面給Fragment傳值,並彈出提示

EventBus進入Activity頁面給Fragment傳值,並彈出提示

1. 進入頁面先訪問網路狀態.返回true或false表示網路狀態的有無,將這個值使用EventBus傳給Fragment頁面

首先需要匯入依賴

  1. compile 'org.greenrobot:eventbus:3.1.1'  


2. 加入許可權,允許訪問網路狀態的許可權
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"></uses-permission>
<uses-permission android:name="android.permission.INTERNET"
></uses-permission>

3. 某個Activity裡面先呼叫訪問網路狀態的方法

//進入頁面判斷網路,傳送EventBus黏性事件判斷網路狀態
boolean flag = NetConnectionUtil.isNetConnectioned(this);

if (flag){  //有網狀態下  flag = true
    EventBus.getDefault().postSticky("true");
}else {    //無網狀態下   flag = false
    EventBus.getDefault().postSticky("false"
); }

4. 判斷網路狀態,設定網路的封裝工具類方法

import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.provider.Settings;
/**
 * 判斷網路連線的工具類
 */
public class 
NetConnectionUtil { /** * 判斷是否有網路連線的方法 */ public static boolean isNetConnectioned(Context context){ boolean flag = false; //1. 獲取網路連線物件 ConnectivityManager manager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); //2. 獲取NetworkInfo物件,獲取網路連線的資訊,新增許可權:<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"></uses-permission> NetworkInfo info = manager.getActiveNetworkInfo(); //3. 資訊不為空時,就代表網路可用 if (info != null){ return info.isAvailable(); } return flag; } /** * 網路無連線時跳轉頁面,彈出對話方塊進行網路的設定 */ public static void setNetConnectionWork(final Context context){ AlertDialog.Builder builder = new AlertDialog.Builder(context); builder.setTitle("網路載入錯誤!"); builder.setMessage("網路連線不可用,是否設定網路?"); builder.setPositiveButton("確定", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialogInterface, int i) { //跳轉到系統的設定網路的介面 Intent intent = new Intent(Settings.ACTION_WIFI_SETTINGS); context.startActivity(intent); } }); builder.setNegativeButton("取消",null); builder.show(); } }

5. Fragment裡面需要註冊 Eventbus,定義一個接受的事件,上面加註解,在銷燬的時候取消註冊

//初始化EventBus,註冊EventBus
EventBus.getDefault().register(this);

//在UI主執行緒,註冊粘性訂閱事件,進行黏性事件處理函式
@Subscribe(sticky = true,threadMode = ThreadMode.MAIN)
//判斷網路,請求網路資料
public void getEventBus(String flag){
    if (flag.equals("true")){
        Toast.makeText(getActivity(),"網路狀態良好,訪問網路資料正常",Toast.LENGTH_SHORT).show();

        //動態傳值替換請求路徑:get請求方式
presenter.get(num,page);

        //無動態傳值請求路徑:get請求方式
        //presenter.get();
}else {
        NetConnectionUtil.setNetConnectionWork(getActivity());
    }
}

//在onDestory()方法中取消訂閱:防止記憶體溢位
@Override
public void onDestroy() {
    super.onDestroy();
    EventBus.getDefault().removeAllStickyEvents();
    EventBus.getDefault().unregister(this);
}