文档章节

Android开发过程中的坑及解决方法收录

SEOwhywhy
 SEOwhywhy
发布于 2018/12/08 20:53
字数 770
阅读 14
收藏 2

  1.某个控件要放在Linearlayout布局的底部(底部导航条)
  
  <LinearLayout
  
  android:layout_width="match_parent"
  
  android:orientation="vertical"
  
  android:layout_height="match_parent"
  
  ...>
  
  <LinearLayout
  
  android:layout_width="match_parent"
  
  android:orientation="vertical"
  
  android:layout_height="0dp"
  
  android:Layout_weight="2">
  
  ...//嵌套的其他布局……
  
  </LinearLayout>
  
  ...//嵌套的其他布局
  
  <LinearLayout
  
  android:layout_width="match_parent"
  
  android:layout_height="wrap_content">
  
  </LinearLayout>
  
  </LinearLayout>
  
  简单说明一下,上面的代码中有一个Linearlayout,里面嵌套了两个Linearlayout
  
  这里的关键是嵌套里面的第一个Linearlayout布局,注意这个布局里面的这两行属性代码
  
  `android:layout_height="0dp"`
  
  `android:Layout_weight="2"`
  
  第二个Linearlayout就是可以放在底部的一个Linearlayout(当然你可以写你自己的布局)
  
  2.RecyclerView显示图片卡顿优化
  
  思路:图片太多,显示卡顿的原因主要是因为在RecyclerView滑动的过程中同时加载网络的图片,所以卡顿。
  
  我们实现滑动的时候不加载网络图片,当不滑动的时候再加载网络图片,这样流畅度就可以提高许多
  
  在RecyclerView的Adapter(自己写的)中添加一个判断RecyclerView是否滑动的boolean变量isScrolling
  
  protected boolean isScrolling = false;
  
  public void setScrolling(boolean scrolling) {
  
  isScrolling = scrolling;
  
  }
  
  之后在Adapter里面的onBindViewHolder方法控制加载图片
  
  @Override
  
  public void onBindViewHolder(ViewHolder holder, int position) {
  
  String url = mlist.get(position).getImg().getUrl();
  
  if (!isScrolling){
  
  //我使用的是Ion显示图片框架
  
  //如果不在滑动,则加载网络图片
  
  Ion.with(holder.imageView.getContext())
  
  .load(url)
  
  .withBitmap()
  
  .placeholder(R.drawable.grey)
  
  .intoImageView(holder.imageView);
  
  }else {
  
  //如果在滑动,就先加载本地的资源图片
  
  Drawable temp = holder.imageView.getResources().getDrawable(R.drawable.grey, null);
  
  holder.imageView.setImageDrawable(temp);
  
  }
  
  }
  
  在相应的Activity中调用RecyclerView的addOnScrollListener方法,设置一个滑动监听器
  
  mRv.addOnScrollListener(new RecyclerView.OnScrollListener() {
  
  @Override
  
  public void onScrollStateChanged(RecyclerView recyclerView, int newState) {
  
  if (newState == RecyclerView.SCROLL_STATE_IDLE) { // 滚动静止时才加载图片资源,极大提升流畅度
  
  adapter.setScrolling(false);
  
  adapter.notifyDataSetChanged(); // notify调用后onBindViewHolder会响应调用
  
  } else{
  
  adapter.setScrolling(true);
  
  }
  
  super.onScrollStateChanged(recyclerView, newState);
  
  }
  
  });
  
  3.ScrollView与RecyclerView滑动冲突
  
  这里使用NestedScrollView即可,然后设置RecyclerView的NestedScrollingEnabled属性为false
  
  两种方法设置RecyclerView的NestedScrollingEnabled属性
  
  - 调用`RecyclerView`的`setNestedScrollingEnabled`方法
  
  - 在xml文件里面,把`RecyclerView`直接设置为`flase`
  
  判断ScrollView是否滑动到底部
  
  给ScrollView添加一个滑动监听器,然后进行相关处理
  
  mNestedsv.setOnScrollChangeListener(new NestedScrollView.OnScrollChangeListener(www.michenggw.com) {
  
  @Override
  
  public void onScrollChange(www.mingcheng178.com NestedScrollView v, int scrollX,www.trgj888.com int scrollY, int oldScrollX, int oldScrollY) {
  
  View view = mNestedsv.getChildAt(0);
  
  if (mNestedsv.getHeight(www.yongshiyule178.com )+mNestedsv.getScrollY() ==view.getHeight()){
  
  //相关提示
  
  //相关操作
  
  //下拉刷新,数据更新操作
  
  //...
  
  }
  
  }
  
  });
  
  4.使用okhttp返回数据相同解决方法
  
  看了资料,好像是respone.body().string()只能调用一次,还有okhttp是有缓存的
  
  使用的情景:有一个API接口,每次访问改接口,都会返回不同的json数据,但是使用okhttp,每次访问该API返回的数据都是相同
  
  我的解决方法:
  
  给API请求时添加参数,有些API是可以带参数的,可以修改参数,达到是不同网址的效果
  
  5.RecyclerView数据更新
  
  调用Adapter的notifyDataSetChanged方法即可

© 著作权归作者所有

SEOwhywhy
粉丝 9
博文 155
码字总数 342404
作品 0
私信 提问
程序媛Android学习路线指南

前言 看到一篇文章中提到“最近几年国内的初级Android程序员已经很多了,但是中高级的Android技术人才仍然稀缺“,这的确不假,从我在百度所进行的一些面试来看,找一个适合的高级Android工程...

浮生侃侃
2016/04/23
256
1
开发工具总结(4)之Android Studio3.0填坑指南

序言 上篇讲了: 全面总结Android Studio2.X的填坑指南 这篇讲一下AS3.0的坑。。 作为这个世界上走在最前沿的生物“猿”,怎么能对新事物一无所知呢,10月26日,随着Android 8.1 Oreo的预览版...

aweiloveandroid
2017/10/30
0
0
Android学习攻略:手把手教你循序渐进地学习Android知识

前言 如果你也学习Android,那么你大概率会看过我的文章。经常有读者给我留言:“该怎么学习Android?”、“日常学习Android的方法是什么”。 所以,今天,我将献上一份《Android学习指南》,...

Carson_Ho
04/24
0
0
附讲师PPT下载l个推TechDay广州站,如何高效使用Kotlin?

近日,个推TechDay携手GDG广州,邀请了多位跨领域的Android开发专家,以“Kotlin Everywhere,演进Android开发生态”为主题,与在场观众一同探索Android开发领域的前沿技术及实践方法。 以下...

个推大数据
08/28
0
0
Demo Show | 蚂蚁金服 mPaaS IDEA 插件实践

前言 本文将结合上周在 JetBrains 开发者大会分享的《mPaaS IDEA 插件实践》,深入展开 mPaaS 在 IDEA 插件开发之路上踩过的坑和沉淀的思考,希望能够带来一些参考性: mPaaS 冷启动过程如何...

josephjin
2018/12/18
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Andorid SQLite数据库开发基础教程(2)

Andorid SQLite数据库开发基础教程(2) 数据库生成方式 数据库的生成有两种方式,一种是使用数据库管理工具生成的数据库,我们将此类数据库称为预设数据库,另一种是使用代码生成的数据库。...

大学霸
25分钟前
3
0
YecPad 开源啦!: 基于C#的功能强大的可编辑记事本文本编辑软件

JY Lin 开源:YecPad : 基于C#的功能强大的可编辑记事本文本编辑软件 YecPad 是一款基于C#编程语言开发的功能强大的可编辑记事本文本编辑软件。 可以进行文本文件的打开、保存、删除及编辑功...

YDOOK
32分钟前
3
0
StringBuilder 与 StringBuffer 的区别

StringBuffer是线性安全的,支持并发操作,适合多线程。 StringBuilder线性不安全,不支持并发操作,适合单线程。 也就是说他们俩区别就在于支不支持并发操作,使用上基本上类似...

无名氏的程序员
35分钟前
3
0
js 找数组中的最值

本文转载于:专业的前端网站➸js 找数组中的最值 背景: 2个数组以下 , 比如 [[4, 9, 1, 3], [13, 35, 18, 26], [32, 35, 97, 39], [1000000, 1001, 857, 1]] 找最值的时候,我一开始想用两个...

前端老手
44分钟前
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部