Android开发遇到问题汇总

1、 

ADT 在project里面删除了 Android Private Libraries怎么办?

答:在项目上点击右键,点击Android Tools -> Fix Project Properties 即可。

2、

ListView中用到CheckBox,CheckBox的状态混乱的问题?

答:

我敢说你们一定是用了convertView/ViewHolder 这种缓存技术。如果你不用这种技术,就没有CheckBox状态混乱的情况出现;但是取而代之的是你CheckBox的状态没有被保存,因为BaseAdapter中的getView()方法只会绘出ListView的每一行,他没有义务为你保存CheckBox的状态。需要你自己去在getView中做一些工作。

 无论你采不采用convertView/ViewHolder 这种缓存技术,你可以通过这种方法解决CheckBox的状态保存与一致的问题。

就是设置一个Map<Integer, Boolean>  checkState=new HashMap<Integer, Boolean>();保存你当前选择的状态。然后在BaseAdapter的getView()方法中通过CheckBox checkBox=(CheckBox)convertView.findViewById(R.id.check)中获取到CheckBox,然后再checkBox.setChecked()就可以啦。很简单把?

· 其实还是用convertView/ViewHolder 这种缓存技术比较好,这样子你浏览ListView的时候速度很快。而不采用convertView/ViewHolder 这种缓存技术的时候,你会明显感觉ListView很卡

· convertView/ViewHolder 缓存技术的实质,其实就是convertView的复用,因为我在查看convertView是否为null的时候,只有7次它输出null,其余都是convertView不为null。也就是说convertView这个对象引用只有7个(每个手机不同,就是一个屏幕最多容纳的条目数)。convertView/ViewHolder 其实是在复用每一个条目的View。只让这7个引用对应7个View的实例,而不是我们每次都给一个引用建立一个新的View实例。这样子,在ListView绘制调用getView的时候,我们只建立了7个View实例,只是每次把View中的内容改变了一下


3、Android编程之Fragment使用动画造成Unknown animation name: objectAnimator异常

答:

在为Fragment做切换动画,启动后遇到了一个异常:

Caused by: java.lang.RuntimeException: Unknown animation name: objectAnimator

截图如下:


我的代码如下:

[java]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. fragment = Fragment.instantiate(getActivity(), clz.getName());  
  2. fragment.setArguments(args);  
  3. ft.setCustomAnimations(R.animator.fragment_rotate_enter,  
  4.         R.animator.fragment_rotate_exit,  
  5.         R.animator.fragment_rotate_pop_enter,  
  6.         R.animator.fragment_rotate_pop_exit);  
  7. ft.replace(R.id.fragment_stub, fragment);  
  8. ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN);  
  9. ft.addToBackStack(null);  

我的动画文件如下,其他三个大同小异,就不贴出来了  :

[html]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. <set xmlns:android="http://schemas.android.com/apk/res/android" >  
  2.   
  3.     <objectAnimator  
  4.         android:duration="1000"  
  5.         android:propertyName="rotationY"  
  6.         android:valueFrom="180.0"  
  7.         android:valueTo="360.0"  
  8.         android:valueType="floatType" />  
  9.     <objectAnimator  
  10.         android:duration="1000"  
  11.         android:propertyName="alpha"  
  12.         android:valueFrom="0.0"  
  13.         android:valueTo="1.0"  
  14.         android:valueType="floatType" />  
  15.   
  16. </set>  

对于这个异常,网上有很多说法,但我看了下解释,都没有切中要害。在这里,我给具体讲一下原因:

第一是因为我使用了objectAnimator这个动画标签,

第二是因为Fragment我使用的是V4包中的。


原因就在这里:V4包中的Fragment对于动画的支持不完全。如果手中有V4源代码的同学,可以翻出来具体看看——在FragmentManager类中的loadAnimation方法。我这里就直接贴图了:


标记处的那个位置,就是关键代码。在这里面才会处理与objectAnimator相关的标签,如截图所示:


所以,才会造成标题上那个异常。


这里我再延伸一些内容:那么V4包中的Fragment支持哪些动画标签内呢?看一下V4包中源码截图:

那个错误异常,也就是这里报出来的。


那么,是不是就不能为Fragment切换使用objectAnimator的动画标签呢?

当然也不是不能,如果你非要使用这个动画,就请使用源码中的Fragment,它是没有注释掉那段动画加载代码的。


小结:
在使用V4包中Fragment时,使用的切换动画效果,其动画文件中不能包含objectAnimator,Animator这类标签。如果必须要使用,请将工程中使用的V4包中Fragment相关类,换成源码中的Fragment
相关类。


4、

4、Android EditText点击两次才能响应,解决办法  

答:

在编写程序的过程中,发现EditText setOnClickListener事件响应中,只有获取焦点的时候才会响应,

如当焦点在别的控件上时,只能先点击获取焦点,第二次点击才会响应,解决办法改用setOnTouchListener监听,

android.view.View下的OnTouchListener接口是只要触摸(touch)状态改变,就会触发该事件。先记录下来,分享一下

代码如下:

		woman_SDloadText.setOnTouchListener(new View.OnTouchListener() {
			//按住和松开的标识
			int touch_flag=0;
			@Override
			public boolean onTouch(View v, MotionEvent event) {
				touch_flag++;
				if(touch_flag==2){
					//自己业务

				}
				return false;
			}
		});

5、FragmentTransaction commit报错Activity has been destroyed

表象app第一次启动后退出,再次启动就会crash。分析原因我退出app主要采用finish关闭,这样关闭会存在app一些进程任然存活。

解决办法添加

android.os.Process
        .killProcess(android.os.Process.myPid());

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值