Android studio3.5 SDK29项目开发笔记

前提是你 提交于 2019-12-31 21:06:26

1.build.gradle compile过时
在这里插入图片描述
改为implementation
在这里插入图片描述
2.getDrawable过时
改为
 holder.imageView.setImageDrawable(ResourcesCompat.getDrawable(getResources(),imgResId,null));
3.Error:Your project path contains non-ASCII characters.
错误原因:引用项目的路径中包含中文
解决1:换英文路径
解决2:项目中的gradle.properties中添加
android.build.gradle.overridePathCheck=true,
重新编译。
4.INVISIBLE和GONE的主要区别是:当控件visibility属性为INVISIBLE时,界面保留了view控件所占有的空间;而控件属性为GONE时,界面则不保留view控件所占有的空间。

5.菜单项onCreateOptionsMenu()和onOptionsItemSelected()的区别:
(1)函数onCreateOptionsMenu()为创建Menu菜单的项目。
(2)函数onOptionsItemSelected()为处理菜单被选中运行后的事件处理。
(3)onPrepareOptionsMenu
  onPrepareOptionsMenu是每次在display menu之前,都会去呼叫,
  只要按一次menu按键,就会呼叫一次。
  所以你会发现每次只要按一次menu按键,
  menu菜单就会多两个(因为预设是两个)
  你可以利用onPrepareOptionsMenu来做update menu状态的动作

6.List遍历删除数据三种方法
(1).增强的for循环

public void listRemove() {
    List<Student> students = this.getStudents();
    for (Student stu : students) {
      if (stu.getId() == 2) 
        students.remove(stu);
    }
  }

(2).迭代器遍历删除(推荐)

public void iteratorRemove() {
    List<Student> students = this.getStudents();
    System.out.println(students);
    Iterator<Student> stuIter = students.iterator();
    while (stuIter.hasNext()) {
      Student student = stuIter.next();
      if (student.getId() % 2 == 0)//删符合此条件的数据
        stuIter.remove();
    }
    System.out.println(students);
  }

(3).不使用增强的for循环,每次重新获取list的size遍历的情况运行时不会报错,但是可能删除的结果是错的。

public void listRemove2() {
    List<Student> students = this.getStudents();
    for (int i=0; i<students.size(); i++) {
      if (students.get(i).getId()%2 == 0)
        students.remove(i);
    }
  }

7.Java中的return有两方面的用途:
使用的两种形式:
(1)方法有返回值类型:
return 返回值;//返回方法指定类型的值(前提是方法的返回值类型不是void)
(2)方法没返回值类型:
return;//方法的结束,它会导致当前的方法退出。

8.ViewHolder

ViewHolder就是一个很普通的类,类似一个Bean,用来将混存的View封装好,convertView中的SetTag将这些缓存打上对应的标签以供下次直接打包调用。

 public View getView(final int position, View convertView, ViewGroup parent) {
        final CommonAlbum commonAlbum = getItem(position);
        final Album album = commonAlbum.getAlbum();
        final ViewHolder holder;//将混存的View封装好
        if (convertView == null) {
            convertView =  LayoutInflater.from(mContext).inflate(R.layout.favorite_item, null);//在项目中使用adapter时,加载item布局使用
            holder = new ViewHolder();
            holder.mAlbumName = convertView.findViewById(R.id.tv_album_name);
            holder.mCbButton =  convertView.findViewById(R.id.cb_favorite);
            holder.mAlbumPost =  convertView.findViewById(R.id.iv_album_poster);
            holder.mContainer =  convertView.findViewById(R.id.favorite_container);
            convertView.setTag(holder);//convertView中的SetTag将这些缓存打上对应的标签以供下次直接打包调用
            }
            else {
            holder = (ViewHolder) convertView.getTag();//// 如果ConvertView不为空,则表示在缓存中
        }
              class ViewHolder {//将混存的View封装好
        ImageView mAlbumPost;
        TextView mAlbumName;
        CheckBox mCbButton;
        RelativeLayout mContainer;
    }

8.Class.getName():以String的形式,返回Class对象的“实体”名称;
Class.getSimpleName():获取源代码中给出的“底层类”简称。

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!