EventBus進入Activity頁面給Fragment傳值,並彈出提示
阿新 • • 發佈:2019-02-18
1. 進入頁面先訪問網路狀態.返回true或false表示網路狀態的有無,將這個值使用EventBus傳給Fragment頁面
首先需要匯入依賴
- 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 classNetConnectionUtil { /** * 判斷是否有網路連線的方法 */ 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); }