介绍
怎么在Android中实现一个无网络页面切换功能?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。
<强>实现思路强>
需求是在无网络的时候显示特定的页面,想到要替换页面的地方,大多都是recyclerview或者第三方recyclerview这种需要显示数据的地方,因此决定替换掉页面中所有的recyclerview为无网络页面
<强>实现过程强>
1,在BaseActivity中,当加载布局成功以后,通过id找到要替换的观点,通过indexOfChild()方法,找到要替换的视图的位置,再通过删除和添加视图来实现,因为是在基地替换,而且使用的是findviewById,这样子就省去了考虑片段中的视图中,局限性是要替换的视图的命名必须要统一
2点击按钮重新请求数据,需要重新刷新数据,因此使用了无网络页面的行为需要重写基础的刷新数据方法,去重新请求数据。
<>强优缺点强>
因为只在基地中替换,因此要替换的视图id名需要一致,对比通过decorview拿到内容之后遍历所有控件获取到要替换的视图的方法效率更高,而且省去了考虑片段的情况,通过findviewById()方法可以直接获取到片段中需要替换的recyclerview。
<强>代码实现强>
在加载布局成功初始化无网络页面
, @Override public 才能;void  onWindowFocusChanged (boolean hasFocus), { ,,,super.onWindowFocusChanged (hasFocus); ,,,if (hasFocus), { ,,,,,initNoNetView (R.id.id_xrv R.id.rv); ,,,} 以前,,}>需要一个工具类用来获取网络状态
/* * ,,*,判断网络是否连接 ,,* ,,*,@param 上下文 ,,* @return ,,*/public 才能;static  boolean 与(Context 上下文),{ ,,,ConnectivityManager connectivity =, (ConnectivityManager),上下文 ,,,,,,,.getSystemService (Context.CONNECTIVITY_SERVICE); ,,,if (null !=,连接),{ ,,,,,NetworkInfo info =, connectivity.getActiveNetworkInfo (); ,,,,,if (null !=, info ,,, info.isConnected ()), { ,,,,,,,if (info.getState (),==, NetworkInfo.State.CONNECTED), { ,,,,,,,,,return 真实; ,,,,,,,} ,,,,,} ,,,} ,,,return 假; 以前,,}>初始化无网络页面,定义一个不定长的视图的id组成的数组,参数为需要替换的视图的共同的id,可以为多个,会替换第一个找到的不为零的观点。
private void initNoNetView (int …id), { ,,,if (! OkHttpUtil.isConnected (BaseActivity.this),,,, ! haveShowNetView), { ,,,,,final List, viewList =, new ArrayList<在(); ,,,,,//通过id获取视图 ,,,,,for (int id : id), { ,,,,,,,viewList.add (findViewById (id)); ,,,,,} ,,,,,//实现自己的无网络页面 ,,,,,final View noNetView =, View.inflate (BaseActivity.this, R.layout.layout_no_net,, null); ,,,,,noNetView.findViewById R.id.btn_try .setOnClickListener (new View.OnClickListener (), { ,,,,,,@Override ,,,,,,,public void onClick (View v), { ,,,,,,,,,if (! OkHttpUtil.isConnected (BaseActivity.this)), { ,,,,,,,,,,,T.showShort (BaseActivity.this,,“没有获取到网络,请重试…“); ,,,,,,,,,,,返回; ,,,,,,,,,} ,,,,,,,,,//切换到有网络页面 ,,,,,,,,,showHaveNetView (viewList noNetView); ,,,,,,,} ,,,,,}); ,,,,,//切换到无网络页面 ,,,,,showNoNetView (viewList noNetView); ,,,,, ,,,} 以前,,}> 页面切换
private void showHaveNetView (List怎么在Android中实现一个无网络页面切换功能