【发布时间】:2016-02-26 11:41:03
【问题描述】:
我想多选自定义ListView行,我使用CardView设计它并且所有事件都发生在这张卡上,我想在用户长按卡时实现Contextual Action bar 'CAB',实际上我做到了但可以't change the row color state when selected like this, I used the code from this answer:
并使用此代码使CardView 可检查:
public class CheckableCard extends CardView implements Checkable {
private boolean mChecked;
private final static int[] CHECKED_STATE_SET = {
android.R.attr.state_checked
};
public CheckableCard(Context context, AttributeSet attrs) {
super(context, attrs);
}
@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() {
setChecked(!mChecked);
}
@Override
public boolean isChecked() {
return mChecked;
}
@Override
public void setChecked(boolean checked) {
if (mChecked != checked) {
mChecked = checked;
refreshDrawableState();
}
}
}
然后在OnLongClickListener 中的CardView 中检查:
cardView.setChecked(true);
但没有任何效果!
我也不知道如何多选它,因为它正常ListView 行我们使用setMultiChoiceModeListener 但是当事件发生在卡片未列出时我不知道如何实现。
我是初学者,需要帮助。
【问题讨论】:
-
很遗憾,检查状态对 CardView 没有任何影响。但是,现在我在我的应用程序上工作(这里:play.google.com/store/apps/details?id=com.lb.app_manager)来更新它(目前它有假卡),这将使用“已选择”字段来知道它已被选中,并相应地设置背景颜色。这不一样,但也许对你来说就足够了。关于多选本身,我已经存储了哪些项目被选中,以便在 getView 中您将能够相应地更新它们。
-
@androiddeveloper 你是用this 回答来实现选择器效果的吗?,也请你发一下代码sn-p,因为我不知道如何实现。
-
仅适用于前台,且仅适用于未选中状态(即默认和点击)。我现在在办公室,我的应用是在业余时间完成的。我将发布代码。适配器也需要它吗?适配器只调用 setSelected(_selectedItems.contains(getItem(pos).someId)) 或类似的东西。
-
是的,请发布完整的 sn-p,因为我是初学者,这是我第一次处理这个问题。
-
好吧,我最近才这样做,但这真的取决于你是否需要。
标签: android multi-select android-cardview