把网络请求加载过程dialog做成一个View
2014-12-17 08:08
232 查看
之所以有这种需求,是因为我们自己写一个工具类继承dialog,在网络请求的时候进行dialog的show() 或者dismiss(),但是会出现一个问题:当在进行网络请求的时候进行横竖屏切换就会出现dialog找不到底部的view, 也就会出现程序崩溃的问题。 尤其是SAMSUNG平板的横竖屏和我们常见平板的横竖屏完全是相反的。
如果想要使出现的加载过程与Activity无关,请看第四种思路。
大致有三种思路:
一、 首先我们想到的就是Activity被销毁了,那我们在进行横竖屏切换的时候不让他销毁不就会出现这种问题了。
在manifest中对Activity进行配置:
二、 在每一次我们对dialog进行show()的时候,判断当前Dialog所属的Activity是否销毁,这种方式也可以,但是每一个show()都添加一个判断,代码会很臃肿。这个方法也是网上最常用的方法。
三、 把加载过程做成一个view,继承View,在view中跑一个动画,在需要使用加载过程的时候,通过在Activity中创建的LoadingProView,进行show()和hide()操作即可。
这个方式也是最好的一种方式,大家可以试试。
方式如下:
在使用该网络请求loading加载的Activity中:
四、 可以使用相对布局,当出现网络请求加载的时候让加载动画的布局visible,加载完成后设置invisible。
但是这又出现一个问题:如果在加载的过程中,我点击返回键,这时不仅这个加载页面没有了,后面的Activity对应的页面也没有了。此时我们应该重写onKeyDown(),判断上面的布局是否存在,如果不存在,直接return true; 否则,隐藏布局,并且 return false; 这样就能够把问题解决了。
如果想要使出现的加载过程与Activity无关,请看第四种思路。
大致有三种思路:
一、 首先我们想到的就是Activity被销毁了,那我们在进行横竖屏切换的时候不让他销毁不就会出现这种问题了。
在manifest中对Activity进行配置:
android:configChanges="screenSize|orientation"
二、 在每一次我们对dialog进行show()的时候,判断当前Dialog所属的Activity是否销毁,这种方式也可以,但是每一个show()都添加一个判断,代码会很臃肿。这个方法也是网上最常用的方法。
if(**Activity.isFinishing()){ xxx }
三、 把加载过程做成一个view,继承View,在view中跑一个动画,在需要使用加载过程的时候,通过在Activity中创建的LoadingProView,进行show()和hide()操作即可。
这个方式也是最好的一种方式,大家可以试试。
方式如下:
import com.wonhigh.base.R; import android.content.Context; import android.graphics.drawable.AnimationDrawable; import android.view.View; import android.view.ViewGroup; import android.view.ViewParent; import android.widget.FrameLayout; import android.widget.ImageView; import android.widget.TextView; /** * * TODO: 数据请求加载过程 <br> * reference: http://blog.csdn.net/lgl1170860350/article/details/39958421 * * @author xxx * @date 2014-12-12 下午3:54:29 */ public class LoadingProView extends FrameLayout { private View mTarget = null; private AnimationDrawable loadingDrawable = null; private TextView tv_text = null; private ImageView imgView = null; public LoadingProView(Context context, View target) { super(context); mTarget = target; inflate(context, R.layout.loading_view, this); imgView = (ImageView) findViewById(R.id.loading_img); loadingDrawable = (AnimationDrawable) imgView.getDrawable(); tv_text = (TextView) findViewById(R.id.loading_text); setVisibility(View.GONE); ViewGroup.LayoutParams lp = mTarget.getLayoutParams(); ViewParent parent = mTarget.getParent(); FrameLayout container = new FrameLayout(context); ViewGroup group = (ViewGroup) parent; int index = group.indexOfChild(mTarget); group.removeView(mTarget); group.addView(container, index, lp); container.addView(mTarget); container.addView(this); group.invalidate(); } public void setText(CharSequence text) { tv_text.setText(text); } public void show() { setVisibility(View.VISIBLE); loadingDrawable.start(); } public void hide() { setVisibility(View.GONE); loadingDrawable.stop(); } public boolean isShown() { return getVisibility() == View.VISIBLE; } private View.OnClickListener interceptListener = new View.OnClickListener() { @Override public void onClick(View v) { // do nothing } }; /** * 设置loading显示时是否拦截点击事件<br/> * @param flag true:拦截 */ public void interceptClick(boolean flag) { setOnClickListener(flag ? interceptListener : null); } }
在使用该网络请求loading加载的Activity中:
loadingProView = new LoadingProView(this, findViewById(R.id.activity_root_layout_id));然后在相应的地方使用show(), hide()就可以了。
四、 可以使用相对布局,当出现网络请求加载的时候让加载动画的布局visible,加载完成后设置invisible。
但是这又出现一个问题:如果在加载的过程中,我点击返回键,这时不仅这个加载页面没有了,后面的Activity对应的页面也没有了。此时我们应该重写onKeyDown(),判断上面的布局是否存在,如果不存在,直接return true; 否则,隐藏布局,并且 return false; 这样就能够把问题解决了。
相关文章推荐
- 把网络请求加载过程dialog做成一个View
- 使用Fragment+ViewPager使用过程中禁止预加载未展示Fragment页面的网络请求
- 使用Animation list实现网络请求过程中的加载动画dialog
- XlistView 加载头部ViewPager 网络请求数据 存入数据库
- Android---RecyclerView网络请求图片加载
- (一个常用的案例)Fragment xlistview pull 网络请求 刷新分页加载 ImageLoader
- Android VideoView加载网络视频过程中退出页面,出现程序无响应 希望来大神指点一二
- iOS不得姐项目--推荐关注模块(一个控制器控制两个tableView),数据重复请求的问题,分页数据的加载,上拉下拉刷新(MJRefresh)
- MVP框架+RXJava+reftorfit请求网络数据+XRecycleView多条目展示(banner轮播+条目展示、刷新加载)、点击事件+fresco图片加载
- Android 网络:使用URLConnection提交请求,获取html代码加载WebView
- RecyclerView和okhttp结合 实现一个网络请求数据
- iOS tableViewCell 在cell赋值、网络加载照片位置偏移大小错乱,做一个类似qq列表的tableview 更新3
- AlertDialog对话框自定义大小,加载网络请求,点击不消失
- MVP实现用Retrofit请求网络数据Fresco加载图片,Recyclerview CheckBox显示并实现全选删除
- [每天记录一个Bug]Cell中由于block加载网络请求产生的复用
- OkHttp的网络请求数据和RecyclerView的多条目加载,添加分割线
- WebView通过网络请求加载html
- 利用回调接口,写一个专门等待网络请求的dialog提示框
- 自定义网络请求时加载动画dialog
- Android VideoView加载网络视频过程中退出页面,出现程序无响应 希望来大神指点一二