安卓遇到的一些问题

1.Frament


使用静态的时候在布局中必须给fragment加id
否则报错


2.在使用

BridgeWebView时候安卓js双方都得初始化

无论怎样形式的交互,Js 必须要初始化jsBridge

  bridge.init(function(message, responseCallback) {
            console.log('JS got a message', message);
            var data = {
                'Javascript Responds': '测试中文!'
            };
            console.log('JS responding with', data);
            responseCallback(data);
        });


3.在使用序列化存储,修改对象属性步骤

修改对象属性值的时候先反序列化得到原来对象,然后给对象属性重新赋值 ,再存储该对象,这样才能成功存储进去

直接new对象存储是错误的

序列化是以文件形式存储二进制,使用ObjectOutputStream写入,用ObjectInputStream读取

当写入对象的时候,对象写入流会在开头和结尾添加AC/DC

必须用同一个对象写入流写入,因为在对象写入流close的时候会添加DC

,再次写入另外一些对象的时候DC也不会消失,所以当读取的时候就会出现错误!


测试一,错的的将新创建的对象写入,以为可以覆盖

public class SerializabileText {

    public static void main(String[] args) {
        File file = new File("d:\\a\\Object.txt");
     try {
        ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(file));
        People peo = new People("张三",18);
        oos.writeObject(peo);//将类写入一个Object.txt中
        People peo1 = new People("李四",16);
        oos.writeObject(peo1);//本想写入新的People覆盖原来的对象,达到修改效果
        ObjectInputStream ois = new ObjectInputStream(new FileInputStream(file));//用来读取对象
        People people = (People) ois.readObject();//根据写入的Object.txt文件已经存储的对象并强转
        System.out.println(people.name+people.age);
                
    } catch (FileNotFoundException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (Exception e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }   
    }
}

执行结果 张三18
还是最初的值并没有修改

测试2 正确修改

public class SerializabileText {

    public static void main(String[] args) {
        File file = new File("d:\\a\\Object.txt");
     try {
        ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(file));
        People peo = new People("张三",18);
        oos.writeObject(peo);//将类写入一个Object.txt中
        //People peo1 = new People("李四",16);
        //oos.writeObject(peo1);//打算写入新的People覆盖
        ObjectInputStream ois = new ObjectInputStream(new FileInputStream(file));//用来读取对象
        People people = (People) ois.readObject();//根据写入的Object.txt文件已经存储的对象并强转
        people.setAge(19);//给已经原对象重新赋值
        people.setName("李四");
        oos.writeObject(peo);
        System.out.println(people.name+people.age);
                
    } catch (FileNotFoundException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (Exception e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
     
    }

}

输出 李四19
修改正确

 

4。当用Intent.getFloatExtra();时要注意在Inteng.putExtra()时候 如果是小数默认为Double类型,注意转成float类型再发送


5.网络请求遇到问题:手机端和浏览器 url一样返回数据不同:

问题所在 一,手机端url是不是有多余的空格,去掉再试试

二.手机端请求网络框架设置了缓存,当请求url相同时候,手机端不会去访问网络,直接调用之前相同url访问所返回的数据


 要想让ListView中两个item之间产生margin间隙,只需在item布局最外层再加上一个LinearLayout布局,然后再第二层中设置margin属性才能生效,代码如下:

  1. <LinearLayout  
  2. xmlns:android="http://schemas.android.com/apk/res/android"  
  3. android:layout_width="match_parent"  
  4. android:layout_height="100dp"  
  5.     >  
  6.   
  7. <LinearLayout  
  8. xmlns:android="http://schemas.android.com/apk/res/android"  
  9. android:orientation="horizontal"  
  10. android:layout_width="match_parent"  
  11. android:layout_height="match_parent"  
  12. android:layout_marginLeft="5dp"  
  13. android:layout_marginRight="5dp"  
  14. android:layout_marginTop="5dp"  
  15. android:layout_marginBottom="3dp"  
  16. android:background="@drawable/rect_gray"  
  17.     > 

动态设置viewpager 条目是否可滑动

public class NoScrollViewPager extends ViewPager {
    private boolean isScroll;
    public NoScrollViewPager(Context context, AttributeSet attrs ){
        super(context, attrs);
    }
    public NoScrollViewPager(Context context) {
        super(context);
    }
    /**
     * 1.dispatchTouchEvent一般情况不做处理
     *,如果修改了默认的返回值,子孩子都无法收到事件
     */
    @Override
    public boolean dispatchTouchEvent(MotionEvent ev) {
        return super.dispatchTouchEvent(ev);   // return true;不行
    }
    /**
     * 是否拦截
     * 拦截:会走到自己的onTouchEvent方法里面来
     * 不拦截:事件传递给子孩子
     */
    @Override
    public boolean onInterceptTouchEvent(MotionEvent ev) {
        // return false;//可行,不拦截事件,
        // return true;//不行,孩子无法处理事件
        //return super.onInterceptTouchEvent(ev);//不行,会有细微移动
        if (isScroll){
            return super.onInterceptTouchEvent(ev);
        }else{
            return false;
        }
    }
    /**
     * 是否消费事件
     * 消费:事件就结束
     * 不消费:往父控件传
     */
    @Override
    public boolean onTouchEvent(MotionEvent ev) {
        //return false;// 可行,不消费,传给父控件
        //return true;// 可行,消费,拦截事件
        //super.onTouchEvent(ev); //不行,
        //虽然onInterceptTouchEvent中拦截了,
        //但是如果viewpage里面子控件不是viewgroup,还是会调用这个方法.
        if (isScroll){
            return super.onTouchEvent(ev);
        }else {
            return true;// 可行,消费,拦截事件
        }
    }
    public void setScroll(boolean scroll) {
        isScroll = scroll;
    }
}


mViewpager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
    @Override
    public void onPageScrolled(int position, float positionOffset, final int positionOffsetPixels) {
      
        if (mViewPagerIndex == position) {//左滑动 else 右滑
          if (position == 1 && !isHavePower && isFirst) { // 左侧滑动 只监听第一次滑动事件
            mViewpager.setScroll(false);
            isFirst = false;
          // 区分第一次进来 
          final boolean needmove = (boolean) SpUtils.get(MainActivity.this, Constant.HAS_POWER_MOVE, true);
          if (needmove) {
          int width = getWindowManager().getDefaultDisplay().getWidth();
          mViewpager.setScrollX(width);// 第二次 viewpage移动
           } else {
             mViewpager.setScrollX(0);//第一次 viewpage不移动
            }  
        }
} else {
    if (mViewPagerIndex == 1 && isFirst && positionOffset != 0) {//为首页 右滑出来左侧菜单
        mViewpager.setScroll(false);
        isFirst = false;
        mViewpager.setScrollX(0);//viewpage不移动
        final boolean needmove = (boolean) SpUtils.get(MainActivity.this, Constant.HAS_POWER_MOVE, true);
        if (needmove) {
            int width = getWindowManager().getDefaultDisplay().getWidth();
            mViewpager.setScrollX(width);//viewpage移动
        } else {
            mViewpager.setScrollX(0);//viewpage不移动
        }
        mDrawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_UNLOCKED);//设置可滑动
     
    }
}

@Override
public void onPageScrollStateChanged(int state) {
    if (state == 1) {// mViewPagerIndex记录当前选中的条目
        mViewPagerIndex = mViewpager.getCurrentItem();
    } else if (state == 2) {
        mViewPagerIndex = mViewpager.getCurrentItem();
    }
}
 } 
public boolean onTouch(MotionEvent ev) {
    switch (ev.getAction()) {
        case MotionEvent.ACTION_DOWN://监听按下动作 设置ViewPager可滑动
            isFirst = true;
            mViewpager.setScroll(true);
            break;

    }
    return false;
}


CardView作为最外层父布局设置圆角效果会有白色矩形背景,只有在CardView外在包裹一层,矩形圆角消失




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值