您的位置:首页 > 移动开发 > Android开发

Android问题总结(2015.11-2016.1)一

2016-01-23 17:13 495 查看
1.ListView存在复用机制,所以当改变一个Item的UI布局时是会影响其他复用的Item的UI。所以每个Item在显示的时候,一般通过数据(List)中bean来重新布局,以为bean数据是不会复用的。

//接受或者拒绝
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);
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  android 总结