android填坑之路

接入腾讯bugly高德地图报错

[java.lang.NullPointerException]
Attempt to invoke virtual method 'com.amap.api.maps.UiSettings com.amap.api.maps
只有一个空指针却没有其他提示,我估计是libs下的jni库的问题,为了赶进度,这里简单把bugly去掉,之后高德地图正常。

嵌套的子fragment按钮设置点击背景无效

刚开始我以为是嵌套的子fragment问题,搞了半小时,后来发现必须要在fragment里把这个按钮的点击事件写上才有点击效果,真尼玛莫名其妙啊,以前不这样啊,世界变化的太快!

嵌套子fragment使用viewpage不显示

因为extends FragmentPagerAdapter时,传递的FragmentManager是父节点的,改为getChildFragmentManager()即可

重写equals和hashCode函数后,Arraylist调indexOf(object)或者contains(object)无效

场景:

public class ContactsBean implements Serializable {
    public String name;
    public String number;
    public String sort;

    public ContactsBean() {
    }

    public ContactsBean(String name, String number, String sort) {
        this.name = name;
        this.number = number;
        this.sort = sort;
    }

    @Override
    public String toString() {
        return "ContactsBean{" +
                "name='" + name + '\'' +
                ", number='" + number + '\'' +
                ", sort='" + sort + '\'' +
                '}';
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if(null == o)return false;

        if (o instanceof String){
            String thatNumber = (String) o;
            return number.equals(thatNumber);
        }else if(o instanceof CallLogBean){
            CallLogBean callLogBean = (CallLogBean) o;
            if(null == callLogBean.number)
                return false;
            return callLogBean.number.equals(number);
        }else if(o instanceof ContactsBean){
            ContactsBean that = (ContactsBean) o;
            if(null == that.number)
                return false;
            return that.number.equals(number);
        }
        return false;
    }

    @Override
    public int hashCode() {
        return number != null ? number.hashCode() : 0;
    }
}

拿ContactsBean和String来对比,因为要判断电话号码和该对象的电话号码是否一致。这时候调用Arraylist调indexOf(object)或者contains(object)无效。看一下源码

 public boolean contains(Object o) {
        return indexOf(o) >= 0;
    }

最终去看indexOf

public int indexOf(Object o) {
        if (o == null) {
            for (int i = 0; i < size; i++)
                if (elementData[i]==null)
                    return i;
        } else {
            for (int i = 0; i < size; i++)
                if (o.equals(elementData[i]))
                    return i;
        }
        return -1;
    }

关键就在

if (o.equals(elementData[i]))

传的Object是String,那么这里会调用String的equals函数,解决办法就是不要用Arraylist自带函数,把equals函数的两端调换一下位置即可。

 for(int i=0;i

RelativeLayout、LinearLayout点两下才有onClick事件问题

因为在属性里设置了

android:clickable="true"
android:focusableInTouchMode="true"

这两个属性有冲突,去掉android:focusableInTouchMode="true"即可。
另外在background里设置的点击效果drawable文件里,要把android:state_focused="true"去掉,只保留android:state_pressed="true",否则点击效果不出来。

你可能感兴趣的:(android填坑之路)