Android项目中疑难杂症(千问)

[记录Android开发过程中所遇问题 及解决方法]


(1) 问题: ActionBar 更改返回图标 

   解决方法:a1.

        getActionBar.setDisplayHomeAsUpEnabled(true);
        getActionBar.setHomeAsUpIndicator(R.drawable.icon_back);

要求当前API最低版本18,无法从根本解决我的问题

a2. 新增style
	<style name="style_titlebar" parent="Theme.AppCompat.Light">
      	<item name="android:homeAsUpIndicator">@drawable/icon_back</item> 
    	</style>

设置style

     	<activity
            android:name="com.xxx.activity.Activity"
            android:theme="@style/style_titlebar">
        </activity>

 但是这种也会遇到问题,Theme.AppCompat.Light不存在,需要在在sdk中找到/android-support-v7-appcompat 然后导入 将之设为目标工程的依赖~~~


(2) 问题: 在fragment中调用onOptionsItemSelected时,无效

解决方法: 在onCreate中 需要设置setHasOptionsMenu(true);


(3) 问题: 在onPostCreate回调函数的意义

解决方法:在android中一个Activity的创建时,界面的绘制是需要时间的,当我们需要执行某个操作时,如果界面复杂,尚未绘制完成,很容易导致anr.那么如何确保在界面绘制完成,这就是此函数的意义所在了.onPostCreat是在界面绘制完成之后相继执行的.


(4) 问题: 在vio博客项目中,将项目从eclipse转到studio上时,报出Couldn't load weibosdkcore from loader dalvik.system.PathClassLoader 这样一个错误

解决方法:这个异常是表示找不到weibosdkcore.so文件,在studio中引用.so文件时需要build.gradle中引入libs,如下图

(5) 问题:在两个以上的fragment中,每个fragment都添加了ViewPager,然而第二个fragment中得ViewPager不加载subFragment,即:不显示内容

解决方法:在实例化FragmentPagerAdapter时,传入参数常为:

mViewPager.setAdapter(new CommonFragmentPagerAdapter(getActivity().getSupportFragmentManager(), mFragments));
这个参数正是导致此现象的元凶,其参数正确形式应如下:
mViewPager.setAdapter(new CommonFragmentPagerAdapter(getChildFragmentManager(), mFragments));
这样就愉快的解决了此问题

(6) 问题: 在ListView使用getViewTypeCount()时,会意外出现数组下标越界,这个问题很奇怪。明明return的是正确的的Count啊。

解决方法: 原因是这样的,在Android中设置Type值必须是从0开始,依次递增,如果随便设置就会导致这样的问题。很奇怪,如果不是我碰到,真的不会知道。

public static final int TYPE_TITLE = 0;//必须从零开始 否则会出现下标越界的情况
public static final int TYPE_CITY = 1;


(7) 问题: ExpandableList刷新childView的数据。。。坑啊。。。notifyDataChanged()无效。。。

解决方法: 不得不说这是一个很坑的问题,不同于ListView的是,notifyDataChanged此方法只能适用于刷新GroupView的
数据与已经展开组的数据,想要刷新全部ChildView的数据还需要我们再做一些操作。
 notifyDataSetChanged();
        for (int i = 0; i < getGroupCount(); i++){
            if (mEListView.isGroupExpanded(i)){
                mEListView.collapseGroup(i);
                mEListView.expandGroup(i);
            }
        }
(8) 问题: ListView 与 CheckBox 同时设置了点击事件冲突问题解决
解决方法: 由于功能需求 点击ListView的item时要求同时触发CheckBox改变状态 于是写了一个List保存已选中的item唯一标识 但是CheckBox与ListView的点击事件冲突的情况下 不得已剑走偏锋 却也不失为妙招 将CheckBox的clickable设为false 屏蔽其点击事件 这样就点击时就默认触发其父控件的点击事件 成功解决冲突

(9) 问题: 高德 微信等需要签名才能生效调用调试方法
解决方法: 由于android studio在调试是默认无签名(我没找到) 这样就无法经行微信sdk的调试 所以有了这样一个方法 在build.greadle中如下配置:
signingConfigs { //gradle assembleRelease
    release {
        storeFile file(“xxxxxxxxxxxxxxxxxxxxxx/jiaxin0802.jks")
        storePassword “xxxx"
        keyAlias “xxxx"
        keyPassword “xxxx"
    }
}

buildTypes {
    release {
        minifyEnabled false
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        signingConfig signingConfigs.release
    }
    debug{
        minifyEnabled false
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        signingConfig signingConfigs.release
    }
}
两者位置不能反 反了编译通不过

PS 小知识点: ViewPager向后多缓存一个页面 pager.setOffscreenPageLimit(2); 

(10) 问题: listview中的item与button点击事件冲突
解决方法: (1)在布局文件的根元素上中添加属性android:descendantFocusability="blocksDescendants"

(2)在Button中添加属性android:focusable="false"和android:clickable="true"


(11) 问题: Eclipse打开后挂在Android SDK Loader 0%
解决方法: 只能强制退出Eclipse,再次打开无效。 
目前解决办法是强退后手动清除cache:然后重启Eclipse
 另外,stackoverflow上也有人讨论这个问题:http://stackoverflow.com/questions/13489141/eclipse-hangs-at-the-android-sdk-content-loader,提出了许多办法,大多是清除用户数据之类
<span style="font-size:18px;">cd ~/.android
rm -rf ./cache
rm -r ./ddms.cfg</span>


(12)问题 : 卸载应用的同时 删除应用数据
解决方法 : 通过Context.getExternalFilesDir()方法可以获取到 SDCard/Android/data/你的应用的包名/files/ 目录,一般放一些长时间保存的数据
通过Context.getExternalCacheDir()方法可以获取到 SDCard/Android/data/你的应用包名/cache/目录,一般存放临时缓存数据
当你的应用在被用户卸载后,SDCard/Android/data/你的应用的包名/ 这个目录下的所有文件都会被删除,不会留下垃圾数据


(13)问题(完善10) : ListView的item中嵌入Button类的组件时,item点击事件失效
解决方法 : 在item的布局模块的 根布局 中加入android:descendantFocusability=”blocksDescendants”属性就OK了
主要原因是子控件与viewgroup的焦点问题, android:descendantFocusability有三个属性:

beforeDescendants:viewgroup会优先其子类控件而获取到焦点

        afterDescendants:viewgroup只有当其子类控件不需要获取焦点时才获取焦点

        blocksDescendants:viewgroup会覆盖子类控件而直接获得焦点







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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值