我的问题:当我单击 ListViews 的项目时,它会按以下顺序更改其状态:如果未选中 - 未选中、已选中、未选中、已选中,而我希望它只是被选中而没有任何闪烁和闪烁
如果选中:选中 - 未选中(没问题)
此错误仅出现在预 HoneyComb设备上,在 ICS 上一切正常
我认为这个错误是指 Android 的内置机制。如果是这样,有什么解决办法吗?
我有的 :
1) 列表视图 ( multiChoice = true
)
2) 选择器:
<item android:drawable="@color/main_listview_item_pressed_longpressed"
android:state_pressed="true" />
<item android:drawable="@color/main_listview_item_pressed_longpressed"
android:state_checked="true" />
应用于 ListViews 的项目布局
3)项目布局:
<com.sasha.medclock2.CheckedLinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical"
android:paddingLeft="5dip"
android:background="@drawable/list_item_selector"
android:id="@+id/linerar_layout_checkable"
>
<TextView
android:id="@+id/text1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="@drawable/textview_selector"
/>
<TextView
android:id="@+id/text2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="@drawable/textview_selector"
/>
<TextView
android:id="@+id/text3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="@drawable/textview_selector"
/>
<TextView
android:id="@+id/text4"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="@drawable/textview_selector"
/>
</com.sasha.medclock2.CheckedLinearLayout>
4)检查线性布局:
public class CheckedLinearLayout extends LinearLayout implements Checkable {
private final static String TAG = "CheckableLinearLayout";
private static final int[] CHECKED_STATE_SET = {
android.R.attr.state_checked
};
private boolean checked = false;
public CheckedLinearLayout(Context context, AttributeSet attrs) {
super(context, attrs);
}
public CheckedLinearLayout(Context context) {
super(context);
}
@Override
public boolean isChecked() {
return checked;
}
@Override
public void setChecked(boolean checked) {
this.checked = checked;
refreshDrawableState();
//Propagate to childs
final int count = getChildCount();
for (int i = 0; i < count; i++) {
final View child = getChildAt(i);
if(child instanceof Checkable) {
((Checkable)child).setChecked(checked);
}
}
}
@Override
protected int[] onCreateDrawableState(int extraSpace) {
final int[] drawableState = super.onCreateDrawableState(extraSpace + 1);
if (isChecked()) {
mergeDrawableStates(drawableState, CHECKED_STATE_SET);
}
return drawableState;
}
@Override
public void toggle() {
this.checked = !this.checked;
}
}
5)我正在使用ActionBarSherlock
lib 以及HoloEverywhere
6) 我用 ListView.setItemChecked(...) 检查 ListViews 的项目
非常感谢您的帮助,