Android问题总结(2015.11-2016.1)一

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);
        }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值