Android ListView中的Multi-select CardView
我想多选择自定义Android ListView中的Multi-select CardView,android,multi-select,android-cardview,Android,Multi Select,Android Cardview,我想多选择自定义列表视图行,我使用CardView设计它,所有事件都发生在这张卡上,我想实现上下文操作栏“CAB”当用户长按卡时,实际上是我做的,但选中时无法更改行颜色状态,如,我使用了以下代码: 并使用此代码使cardwiew可检查: public class CheckableCard extends CardView implements Checkable { private boolean mChecked; private final static int[
列表视图
行,我使用CardView
设计它,所有事件都发生在这张卡上,我想实现上下文操作栏“CAB”
当用户长按卡时,实际上是我做的,但选中时无法更改行颜色状态,如,我使用了以下代码:
并使用此代码使cardwiew
可检查:
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);
但什么都不管用
此外,我不知道如何多选它,因为它是我们使用的setMultiChoiceModeListener
行的正常ListView
,但当事件发生在card not list上时,我不知道如何实现这一点
我是一名初学者,需要帮助。好的,以下是我所做的:
SelectableCardView
public class SelectableCardView extends CardView
{
private int _unselectedBackgroundColor;
private int _selectedBackgroundColor;
private boolean _isSelectedble;
public SelectableCardView(Context context)
{
this(context,null);
}
public SelectableCardView(Context context,AttributeSet attrs)
{
this(context,attrs,0);
}
public SelectableCardView(Context context,AttributeSet attrs,int defStyleAttr)
{
super(context,attrs,defStyleAttr);
final Resources res=context.getResources();
_selectedBackgroundColor=...
_unselectedBackgroundColor=... // you could use cardview_light_background or cardview_dark_background for the default values here, depending on your theme
}
public void setSelectedBackgroundColor(@ColorInt int selectedBackgroundColor)
{
_selectedBackgroundColor=selectedBackgroundColor;
}
public void setUnselectedBackgroundColor(@ColorInt int unselectedBackgroundColor)
{
_unselectedBackgroundColor=unselectedBackgroundColor;
}
@Override
public void setSelected(final boolean selected)
{
super.setSelected(selected);
if(_isSelectedble)
setCardBackgroundColor(isSelected()?_selectedBackgroundColor:_unselectedBackgroundColor);
}
public void setSelectedble(final boolean selectedble)
{
if(!selectedble)
{
super.setSelected(false);
setCardBackgroundColor(_unselectedBackgroundColor);
}
_isSelectedble=selectedble;
}
}
用法:
<...SelectableCardView
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:clickable="true"
android:foreground="@drawable/card_foreground"
app:cardCornerRadius="@dimen/card_radius"
app:cardElevation="4dp"
app:contentPadding="10dp">
...
...
要使卡片成为选中的,只需在其上调用setSelected(…)
这里没有魔术
遗憾的是,代码的其余部分与您提供的链接类似,选中状态对CardView没有任何作用。但是,现在我正在使用我的应用程序(这里:)来更新它(目前它有假卡),这将使用“selected”字段来知道它已被选中,并相应地设置背景颜色。这不一样,但也许对你来说已经足够了。关于多选本身,我已经存储了所选的项目,以便在getView中可以相应地更新它们。@androiddeveloper您是否使用了answer来实现选择器效果?。另外,请您发布代码片段,因为我不知道如何实现它。仅适用于前台,也仅适用于未选择的状态(表示默认并单击)。我现在在办公室,我的应用程序在业余时间完成。我将发布代码。适配器也需要它吗?适配器仅调用setSelected(_SelectedItem(pos).someId))或者类似的。是的,请发布完整的代码片段,因为我是一个初学者,这是我第一次处理这个问题。我只是最近才做的,但这真的取决于你是否需要。非常感谢,我会实现它,看看它是否有效,如果不行,我会回复你。