Android问题总结(2015.11-2016.1)一
2016-01-23 17:13
495 查看
1.ListView存在复用机制,所以当改变一个Item的UI布局时是会影响其他复用的Item的UI。所以每个Item在显示的时候,一般通过数据(List)中bean来重新布局,以为bean数据是不会复用的。
在getView中代码,else看似没有用,其实就是防止ListView的item的复用导致的Item的变化
2.当ListView中的Item中存在Button等控件,点击Button有效,点击item无效。这是因为你放在列表item中的按钮抢夺了item的焦点,item无法得到相关事件消息,所以无法响应你的OnItemClickListener事件。
解决方法是:
1.在你自定义的ListView Item布局文件中添加android:descendantFocusability=”blocksDescendants”(该属性添加至 最外层布局中)
2.在内部按钮组件中添加 android:focusable=”false” 这个属性,否则 OnItemClickListener 无法响应。
3.运用继承Application,可以管理Activity等一些全局的东西,在androidManifast中,声明自己的Application在哪里
3.android 按home键返回到桌面后,再按桌面应用图标又重新打开该应用的解决方法:
在AndroidManifest.xml中,你的启动activity中加android:launchMode=”singleTask”,将这行代码去掉就可以了
4.WebView与H5进行交互,android应用将数据传给webview中H5页面
第一:对WebView的websettings进行设置支持js,提供传入js方法
第二:创建AndroidToastFotJs类,实现想要的方法
第三:在js调用该方法就可以获得json字符串。
5.webview加载本地html(b方法没有尝试过)
使用loadUrl,不过需要注意,这里因为是使用本地数据,所以传入的url需要做些处理,例如:
a、如果html文件存于assets:则加前缀:file:///android_asset/
b、如果html文件存于sdcard:则加前缀:content://com.android.htmlfileprovider/sdcard/
注意:content前缀可能导致异常,直接使用file:///sdcard/ or file:/sdcard也可以
6.ListView适用ScrollView,有多种方法,比较简单的是自定义ListView
//接受或者拒绝 if (patientBean.isAccept() || patientBean.isDeny()) { viewHolder.acceptBtn.setVisibility(View.INVISIBLE); viewHolder.rejectBtn.setVisibility(View.INVISIBLE); viewHolder.mHandlePatientTv.setVisibility(View.VISIBLE); else {//这样做的原因listView存在item的复用 viewHolder.acceptBtn.setVisibility(View.VISIBLE); viewHolder.rejectBtn.setVisibility(View.VISIBLE); viewHolder.mHandlePatientTv.setVisibility(View.INVISIBLE); }
在getView中代码,else看似没有用,其实就是防止ListView的item的复用导致的Item的变化
2.当ListView中的Item中存在Button等控件,点击Button有效,点击item无效。这是因为你放在列表item中的按钮抢夺了item的焦点,item无法得到相关事件消息,所以无法响应你的OnItemClickListener事件。
解决方法是:
1.在你自定义的ListView Item布局文件中添加android:descendantFocusability=”blocksDescendants”(该属性添加至 最外层布局中)
2.在内部按钮组件中添加 android:focusable=”false” 这个属性,否则 OnItemClickListener 无法响应。
3.运用继承Application,可以管理Activity等一些全局的东西,在androidManifast中,声明自己的Application在哪里
<application android:name="com.drheart.guard.doctor.MyApplication" android:allowBackup="true" android:icon="@drawable/logo" android:label="@string/app_name" android:theme="@style/AppTheme">
3.android 按home键返回到桌面后,再按桌面应用图标又重新打开该应用的解决方法:
在AndroidManifest.xml中,你的启动activity中加android:launchMode=”singleTask”,将这行代码去掉就可以了
4.WebView与H5进行交互,android应用将数据传给webview中H5页面
第一:对WebView的websettings进行设置支持js,提供传入js方法
WebSettings setting = webView.getSettings(); setting.setJavaScriptEnabled(true);//支持js //Webview提供的传入js的方法 webView.addJavascriptInterface(new AndroidToastForJs(mContext), "JavaScriptInterface");
第二:创建AndroidToastFotJs类,实现想要的方法
/** * 以json实现webview与js之间的数据交互,一个实时数据 */ @JavascriptInterface public String jsontohtml1() { JSONObject map; JSONArray array = new JSONArray(); try { map = new JSONObject(); if( null != bean.getTime()|| !"".equals(bean.getTime())){ map.put("time",bean.getTime()); }else{ map.put("tiem", "2015-10-18 12:12:12"); } if( bean.getHeartRate() > 0 ){ map.put("rate", bean.getHeartRate()); }else{ map.put("rate", 0); } array.put(map); } catch (JSONException e) { e.printStackTrace(); } return array.toString(); }
第三:在js调用该方法就可以获得json字符串。
<script type="text/javascript"> var result = JavaScriptInterface.jsontohtml();
5.webview加载本地html(b方法没有尝试过)
使用loadUrl,不过需要注意,这里因为是使用本地数据,所以传入的url需要做些处理,例如:
a、如果html文件存于assets:则加前缀:file:///android_asset/
b、如果html文件存于sdcard:则加前缀:content://com.android.htmlfileprovider/sdcard/
注意:content前缀可能导致异常,直接使用file:///sdcard/ or file:/sdcard也可以
6.ListView适用ScrollView,有多种方法,比较简单的是自定义ListView
public class ListViewForScrollView extends ListView { public ListViewForScrollView(Context context) { super(context); } public ListViewForScrollView(Context context, AttributeSet attrs) { super(context, attrs); } public ListViewForScrollView(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); } @Override /** * 重写该方法,达到使ListView适应ScrollView的效果 */ protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { int expandSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2, MeasureSpec.AT_MOST); super.onMeasure(widthMeasureSpec, expandSpec); } }
相关文章推荐
- 使用C++实现JNI接口需要注意的事项
- Android IPC进程间通讯机制
- Android Manifest 用法
- [转载]Activity中ConfigChanges属性的用法
- Android之获取手机上的图片和视频缩略图thumbnails
- Android之使用Http协议实现文件上传功能
- Android学习笔记(二九):嵌入浏览器
- android string.xml文件中的整型和string型代替
- i-jetty环境搭配与编译
- android之定时器AlarmManager
- android wifi 无线调试
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- android 代码实现控件之间的间距
- android FragmentPagerAdapter的“标准”配置
- Android"解决"onTouch和onClick的冲突问题
- android:installLocation简析
- android searchView的关闭事件
- SourceProvider.getJniDirectories