修 bug心得

6-21:

代码中设置EditText显示输入密码

mContent.setInputType(InputType.TYPE_CLASS_TEXT
                | ((!pwd ? InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD
                        : InputType.TYPE_TEXT_VARIATION_PASSWORD)));

 代码中设置EditText只允许输入数字mContent.setRawInputType(InputType.TYPE_CLASS_NUMBER);


6-8:

问题描述:IntentItem toggleItem extends listItem ,虽然设置mInten enable=false 但是还是支持鼠标点击,且右边不支持左边支持.

解决过程:我反复排查了xml 和代码中mIntent变量的enable clickable属性的值,发现 虽然到setEnable()中强行set clickable=false. 但是到代码打印的log分析得出,mIntent的clickable属性=true.查了半天都不知道是谁改变了他的clickable属性的值.最后没得办法只好设置mIntent的父类的enable=false.终于问题得到完美的解决.

经验:如果你拿一个view的属性变化没得的办法控制时,试一试他的父类.可能 有出其意料的结果奥.

public void setEnable(boolean enabled) {
		if (enabled) {
			mTitle.setTextColor(this.getResources().getColor(R.color.white));
			mIntent.setTextColor(this.getResources().getColor(R.color.white));
		} else {
			mTitle.setTextColor(this.getResources().getColor(R.color.black));
			mIntent.setTextColor(this.getResources().getColor(R.color.black));
		}
		super.enable(enabled);
	}

父类代码:

	public void enable(boolean enabled) {
		if (mBindChild != null) {
			mBindChild.setEnabled(enabled);
			mTitle.setEnabled(enabled);
			((View)mBindChild.getParent()).setEnabled(enabled);//解决问题的代码
		} else {
			super.setEnabled(enabled);
		}
	}
IntenItem.java inflat 的xml

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    style="@style/ListItemContent" >

    <TextView
        android:id="@+id/list_item_title"
        style="@style/Text" />

    <TextView
        android:id="@+id/list_item_intent"
        style="@style/Text"
        android:focusable="true"
        android:clickable="true"
        android:gravity="right|center_vertical" />

</LinearLayout>



6-4:

问题描述:View 不响应OnClick事件我把focusable clickable加到

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/memory_layout"
    style="@style/ListItemContent"
    android:clickable="true"
    android:focusable="true" >

在代码中却调用系统View父类的setOnClickListener设置listener 结果不响应。

解决办法:到listItem.java中重新父类的setOnClickListener方法把listener设置到配有focusable=true clickable=true

属性的view中,这样才能得到响应。

6-3:

问题描述:1,当前网络是有线连接时,到wifi页面点击开启wifi按钮,没得提示。
  2,当前网络是wifi连接时,到有线页面点击开启有线按钮,马上到wifi页面,则可看到wifi信号列表有闪烁现象。
开始修这个bug的时候我以为挺简单的,只要到oncheckedchange()方法里边加上个逻辑,当checked==true时就把
switch.setchecked(false).单独的就加这么一个逻辑远远不够,要用一个handler 把这个逻辑包起来,并且延时1毫秒。为什么这么做呢? 如果不这么做就会碰到调用时机不对的难题。在oncheckedchange()里边不能再一次setchecked()。如果你强行这么做了页面不会刷新,并且会出问题。
<Switch
        android:id="@+id/sw"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textOff="off"
        android:textOn="on" />

public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
		// TODO Auto-generated method stub
		final Context c=this;
		if (buttonView == sw) {
			Log.d("tag", "isChecked=" + isChecked);
			if (isChecked) {
				Handler handler = new Handler();
				handler.postDelayed(new Runnable() {
					public void run() {
//						sw.setChecked(false);
						Toast.makeText(c, "dfdf", Toast.LENGTH_LONG).show();
					}
				}, 1);
			}
		}
	}



5-31:改memery模块

progressBar.setProgress();不能再工作线程中操作,否则不会刷新progressBar状态。得出经验:工作线程不能对

view界面的状态修改  附上代码

mProgress = (ProgressBar) findViewById(R.id.storage_progress);

	public void refreshInternalStorage() {
		mTaskHandler.postDelayed(new Runnable() {
			public void run() {
				final long[] state = new long[3];
				TimeUtil.getStorageState(Environment.getDataDirectory()
						.getPath(), state);
				refreshText(state);
			}
		}, 0);
	}
	private void refreshText(final long[] state) {
		LogUtil.d("total="+state[0]+"  free="+state[1]+"  used="+state[2]+"  progress="+(int) (state[2] * 100 / state[0]));
//		postDelayed(new Runnable() {
//			public void run() {
				final Resources res = getResources();
				mProgress.setProgress(13);//(int) (state[2] * 100 / state[0])
				mTotal.setText(String.format(res.getString(R.string.apps_total,
						TimeUtil.sizeToString(getContext(), state[0]))));
				mUsed.setText(String.format(res.getString(R.string.apps_used,
						TimeUtil.sizeToString(getContext(), state[2]))));
//				mUsed.setText(R.string.apps_used);
//			}
//		}, 0);
	}



<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android" >

    <item
        android:id="@android:id/background"
        android:drawable="@drawable/progressbar_bg"/>
    <item
        android:id="@android:id/progress"
        android:drawable="@drawable/progressbar"/>

</layer-list>



5-30:

问题描述:启动一个activity时动画界面卡。

解决方法:尽量不要在刚启动时加载一些耗时的东东,用延时解决


问题描述:onPreferenceTreeClick onPreferenceChange的区别

onPreferenceTreeClick:能设置到任意的preference类型的变量中,单击preference时触发事件。

onPreferenceChange:只能设置到ListPreference类型的变量中,在弹出的list列表中触发事件。

ListPreference自己有一个框架user在弹出的list列表中做出的选择,会到一个Preference_id名的sharepreference中保存。



5-29:

问题描述:长按调节声音大小,会出现不响声音的现象

解决方法:使用handler解决,当这次声音还没播完下一次播放声音请求又到达,先到handler中remove掉这一次的播放线程,再发送播放声音的请求。

 if (mVolumn.isMyChild(child)) {
            mAudioManager.setStreamVolume(AudioManager.STREAM_MUSIC,
                    Integer.parseInt(newVal), 0);
            mVolHandler.removeMessages(PLAY_PROMPT_MUSIC);
            mVolHandler.sendEmptyMessage(PLAY_PROMPT_MUSIC);
        }

private Handler mVolHandler = new Handler() {

		@Override
		public void handleMessage(Message msg) {
			switch (msg.what) {
			case PLAY_PROMPT_MUSIC:
				playVolunmChangeMusic();
				break;
			default:
				break;
			}
		}

	};

	private void playVolunmChangeMusic() {
		LogUtil.d("mNoMusic=" + mNoMusic);
		if (mNoMusic) {
			mNoMusic = false;
			return;
		}

		if (mPlayer != null) {
			try {
				mPlayer.start();
			} catch (IllegalStateException e) {
				e.printStackTrace();
			}
		}
	}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值